/**
 * @license
 * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
 * Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
 * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
 * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
 * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 * Available under MIT license <http://lodash.com/license>
 */
/*!
 * jQuery JavaScript Library v1.7.2
 * http://jquery.com/
 *
 * Copyright 2011, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2011, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Wed Mar 21 12:46:34 2012 -0700
 */
/*!
 * Sizzle CSS Selector Engine
 *  Copyright 2011, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
/*!

 handlebars v1.1.2

Copyright (C) 2011 by Yehuda Katz

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

@license
*/
/**
 * @version: 1.0 Alpha-1
 * @author: Coolite Inc. http://www.coolite.com/
 * @date: 2008-04-13
 * @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved.
 * @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. 
 * @website: http://www.datejs.com/
 */
/**
 * @version: 1.0 Alpha-1
 * @author: Coolite Inc. http://www.coolite.com/
 * @date: 2008-04-13
 * @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved.
 * @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. 
 * @website: http://www.datejs.com/
 */
/**
 * @version: 1.0 Alpha-1
 * @author: Coolite Inc. http://www.coolite.com/
 * @date: 2008-04-13
 * @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved.
 * @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. 
 * @website: http://www.datejs.com/
 */
/*!
 * jQuery UI Datepicker @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Datepicker
 *
 * Depends:
 *	jquery.ui.core.js
 */
/*!
 * jQuery UI @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI
 */
/*!
 * jQuery UI Widget @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Widget
 */
/*!
 * jQuery UI Mouse @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Mouse
 *
 * Depends:
 *	jquery.ui.widget.js
 */
/*!
 * jQuery UI Sortable @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Sortables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
/*!
 * jQuery UI Button @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Button
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
/*!
 * jQuery UI Draggable @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
/*!
 * jQuery UI Touch Punch 0.2.2
 *
 * Copyright 2011, Dave Furfero
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * Depends:
 *  jquery.ui.widget.js
 *  jquery.ui.mouse.js
 */
/*!
 * jQuery UI Position @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Position
 */
/*!
 * jQuery UI Resizable @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Resizables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
/*!
 * jQuery UI Dialog @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Dialog
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *  jquery.ui.button.js
 *	jquery.ui.draggable.js
 *	jquery.ui.mouse.js
 *	jquery.ui.position.js
 *	jquery.ui.resizable.js
 */
/*!
 * jQuery hashchange event - v1.3 - 7/21/2010
 * http://benalman.com/projects/jquery-hashchange-plugin/
 * 
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
/*!
 * jQuery Tiny Pub/Sub - v0.6 - 1/10/2011
 * http://benalman.com/
 *
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
/*!	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
/*!
 * jQuery UI Droppable @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Droppables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.mouse.js
 *	jquery.ui.draggable.js
 */
/*!
 * jQuery UI Accordion @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Accordion
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
/*!
 * jQuery UI Menu @VERSION
 * http://jqueryui.com
 *
 * Copyright 2012 jQuery Foundation and other contributors
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Menu
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.position.js
 */
/*!
 * jQuery UI Tooltip @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.position.js
 */
/*!
 * MediaElement.js
 * HTML5 <video> and <audio> shim and player
 * http://mediaelementjs.com/
 *
 * Creates a JavaScript object that mimics HTML5 MediaElement API
 * for browsers that don't understand HTML5 or can't play the provided codec
 * Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3
 *
 * Copyright 2010-2012, John Dyer (http://j.hn)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 */
/*!
 * MediaElementPlayer
 * http://mediaelementjs.com/
 *
 * Creates a controller bar for HTML5 <video> add <audio> tags
 * using jQuery and MediaElement.js (HTML5 Flash/Silverlight wrapper)
 *
 * Copyright 2010-2012, John Dyer (http://j.hn/)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 */
/**
 * @license RequireJS order 1.0.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/jrburke/requirejs for details
 */
/*!
 * jQuery UI Effects @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/
 */
/*!
 * jQuery Color Animations
 * http://jquery.org/
 *
 * Copyright 2012 John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 */
/*!
 * jQuery UI Effects Drop @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Drop
 *
 * Depends:
 *	jquery.ui.effect.js
 */
/*!
 * jQuery UI Progressbar @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Progressbar
 *
 * Depends:
 *   jquery.ui.core.js
 *   jquery.ui.widget.js
 */
/*!
 * jQuery UI Tabs @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
/*!
 * jQuery UI Autocomplete @VERSION
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Autocomplete
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.position.js
 *	jquery.ui.menu.js
 */
(function () {
    var a = {};
    define("use", {
        version: "0.2.0",
        load: function (b, c, d, e) {
            e || (e = require.rawConfig);
            var f = e.use && e.use[b];
            if (!f) throw new TypeError("Module '" + b + "' is undefined or does not" + " have a `use` config. Make sure it exists, add a `use` config, or" + " don't use use! on it");
            a[b] = {
                deps: f.deps || [],
                attach: f.attach
            }, c(f.deps || [], function () {
                var a = arguments;
                c([b], function () {
                    var b = f.attach;
                    return e.isBuild ? d() : typeof b == "function" ? d(b.apply(window, a)) : d(window[b])
                })
            })
        },
        write: function (b, c, d) {
            var e = a[c],
                f = e.deps,
                g = {
                    attach: null,
                    deps: ""
                };
            typeof e.attach == "function" ? g.attach = e.attach.toString() : g.attach = "function() {return window['" + e.attach + "'];" + "}", f.length && (g.deps = "'" + f.toString().split(",").join("','") + "'"), d(["define('", b, "!", c, "', ", "[", g.deps, "],", g.attach, ");\n"].join(""))
        }
    })
})(), function () {
    function x(a, b, c) {
        var d = (c || 0) - 1,
            e = a ? a.length : 0;
        while (++d < e) if (a[d] === b) return d;
        return -1
    }
    function y(a, b) {
        var c = a.criteria,
            d = b.criteria,
            e = -1,
            f = c.length;
        while (++e < f) {
            var g = c[e],
                h = d[e];
            if (g !== h) {
                if (g > h || typeof g == "undefined") return 1;
                if (g < h || typeof h == "undefined") return -1
            }
        }
        return a.index - b.index
    }
    function z(a) {
        return "\\" + r[a]
    }
    function A(a, b, c) {
        b || (b = 0), typeof c == "undefined" && (c = a ? a.length : 0);
        var d = -1,
            e = c - b || 0,
            f = Array(e < 0 ? 0 : e);
        while (++d < e) f[d] = a[b + d];
        return f
    }
    function T(a) {
        return a instanceof T ? a : new U(a)
    }
    function U(a, b) {
        this.__chain__ = !! b, this.__wrapped__ = a
    }
    function W(a) {
        function e() {
            if (c) {
                var a = A(c);
                J.apply(a, arguments)
            }
            if (this instanceof e) {
                var f = X(b.prototype),
                    g = b.apply(f, a || arguments);
                return Gb(g) ? g : f
            }
            return b.apply(d, a || arguments)
        }
        var b = a[0],
            c = a[2],
            d = a[4];
        return e
    }
    function X(a, b) {
        return Gb(a) ? L(a) : {}
    }
    function Y(a, b, c) {
        if (typeof a != "function") return Tc;
        if (typeof b != "undefined" && "prototype" in a) {
            switch (c) {
            case 1:
                return function (c) {
                    return a.call(b, c)
                };
            case 2:
                return function (c, d) {
                    return a.call(b, c, d)
                };
            case 3:
                return function (c, d, e) {
                    return a.call(b, c, d, e)
                };
            case 4:
                return function (c, d, e, f) {
                    return a.call(b, c, d, e, f)
                }
            }
            return Gc(a, b)
        }
        return a
    }
    function Z(a) {
        function m() {
            var a = h ? f : this;
            if (d) {
                var n = A(d);
                J.apply(n, arguments)
            }
            if (e || j) {
                n || (n = A(arguments)), e && J.apply(n, e);
                if (j && n.length < g) return c |= 16, Z([b, k ? c : c & -4, n, null, f, g])
            }
            n || (n = arguments), i && (b = a[l]);
            if (this instanceof m) {
                a = X(b.prototype);
                var o = b.apply(a, n);
                return Gb(o) ? o : a
            }
            return b.apply(a, n)
        }
        var b = a[0],
            c = a[1],
            d = a[2],
            e = a[3],
            f = a[4],
            g = a[5],
            h = c & 1,
            i = c & 2,
            j = c & 4,
            k = c & 8,
            l = b;
        return m
    }
    function $(a, b) {
        var c = -1,
            d = gb(),
            e = a ? a.length : 0,
            f = [];
        while (++c < e) {
            var g = a[c];
            d(b, g) < 0 && f.push(g)
        }
        return f
    }
    function _(a, b, c, d) {
        var e = (d || 0) - 1,
            f = a ? a.length : 0,
            g = [];
        while (++e < f) {
            var h = a[e];
            if (h && typeof h == "object" && typeof h.length == "number" && (kb(h) || jb(h))) {
                b || (h = _(h, b, c));
                var i = -1,
                    j = h.length,
                    k = g.length;
                g.length += j;
                while (++i < j) g[k++] = h[i]
            } else c || g.push(h)
        }
        return g
    }
    function ab(a, b, d, e) {
        if (a === b) return a !== 0 || 1 / a == 1 / b;
        var f = typeof a,
            g = typeof b;
        if (a === a && (!a || !q[f]) && (!b || !q[g])) return !1;
        if (a == null || b == null) return a === b;
        var h = E.call(a),
            l = E.call(b);
        if (h != l) return !1;
        switch (h) {
        case j:
        case k:
            return +a == +b;
        case m:
            return a != +a ? b != +b : a == 0 ? 1 / a == 1 / b : a == +b;
        case o:
        case p:
            return a == String(b)
        }
        var r = h == i;
        if (!r) {
            var s = a instanceof T,
                t = b instanceof T;
            if (s || t) return ab(s ? a.__wrapped__ : a, t ? b.__wrapped__ : b, d, e);
            if (h != n) return !1;
            var u = a.constructor,
                v = b.constructor;
            if (u != v && !(Fb(u) && u instanceof u && Fb(v) && v instanceof v) && "constructor" in a && "constructor" in b) return !1
        }
        d || (d = []), e || (e = []);
        var w = d.length;
        while (w--) if (d[w] == a) return e[w] == b;
        var x = !0,
            y = 0;
        d.push(a), e.push(b);
        if (r) {
            y = b.length, x = y == a.length;
            if (x) while (y--) if (!(x = ab(a[y], b[y], d, e))) break
        } else ub(b, function (b, f, g) {
            if (I.call(g, f)) return y++, !(x = I.call(a, f) && ab(a[f], b, d, e)) && c
        }), x && ub(a, function (a, b, d) {
            if (I.call(d, b)) return !(x = --y > -1) && c
        });
        return d.pop(), e.pop(), x
    }
    function bb(a, b) {
        return a + H(S() * (b - a + 1))
    }
    function cb(a, b, c) {
        var d = -1,
            e = gb(),
            f = a ? a.length : 0,
            g = [],
            h = c ? [] : g;
        while (++d < f) {
            var i = a[d],
                j = c ? c(i, d, a) : i;
            if (b ? !d || h[h.length - 1] !== j : e(h, j) < 0) c && h.push(j), g.push(i)
        }
        return g
    }
    function db(a) {
        return function (b, c, d) {
            var e = {};
            c = Rc(c, d, 3);
            var f = -1,
                g = b ? b.length : 0;
            if (typeof g == "number") while (++f < g) {
                var h = b[f];
                a(e, h, c(h, f, b), b)
            } else vb(b, function (b, d, f) {
                a(e, b, c(b, d, f), f)
            });
            return e
        }
    }
    function eb(a, b, c, d, e, f) {
        var g = b & 1,
            h = b & 2,
            i = b & 4,
            j = b & 8,
            k = b & 16,
            l = b & 32;
        if (!h && !Fb(a)) throw new TypeError;
        k && !c.length && (b &= -17, k = c = !1), l && !d.length && (b &= -33, l = d = !1);
        var m = b == 1 || b === 17 ? W : Z;
        return m([a, b, c, d, e, f])
    }
    function fb(a) {
        return nb[a]
    }
    function gb() {
        var a = (a = T.indexOf) === sc ? x : a;
        return a
    }
    function hb(a) {
        return typeof a == "function" && F.test(a)
    }
    function ib(a) {
        return ob[a]
    }
    function jb(a) {
        return a && typeof a == "object" && typeof a.length == "number" && E.call(a) == h || !1
    }
    function rb(a) {
        if (!a) return a;
        for (var b = 1, c = arguments.length; b < c; b++) {
            var d = arguments[b];
            if (d) for (var e in d) a[e] = d[e]
        }
        return a
    }
    function sb(a) {
        return Gb(a) ? kb(a) ? A(a) : rb({}, a) : a
    }
    function tb(a) {
        if (!a) return a;
        for (var b = 1, c = arguments.length; b < c; b++) {
            var d = arguments[b];
            if (d) for (var e in d) typeof a[e] == "undefined" && (a[e] = d[e])
        }
        return a
    }
    function wb(a) {
        var b = [];
        return ub(a, function (a, c) {
            Fb(a) && b.push(c)
        }), b.sort()
    }
    function xb(a, b) {
        return a ? I.call(a, b) : !1
    }
    function yb(a) {
        var b = -1,
            c = mb(a),
            d = c.length,
            e = {};
        while (++b < d) {
            var f = c[b];
            e[a[f]] = f
        }
        return e
    }
    function zb(a) {
        return a === !0 || a === !1 || a && typeof a == "object" && E.call(a) == j || !1
    }
    function Ab(a) {
        return a && typeof a == "object" && E.call(a) == k || !1
    }
    function Bb(a) {
        return a && a.nodeType === 1 || !1
    }
    function Cb(a) {
        if (!a) return !0;
        if (kb(a) || Lb(a)) return !a.length;
        for (var b in a) if (I.call(a, b)) return !1;
        return !0
    }
    function Db(a, b) {
        return ab(a, b)
    }
    function Eb(a) {
        return N(a) && !O(parseFloat(a))
    }
    function Fb(a) {
        return typeof a == "function"
    }
    function Gb(a) {
        return !!a && !! q[typeof a]
    }
    function Hb(a) {
        return Jb(a) && a != +a
    }
    function Ib(a) {
        return a === null
    }
    function Jb(a) {
        return typeof a == "number" || a && typeof a == "object" && E.call(a) == m || !1
    }
    function Kb(a) {
        return a && q[typeof a] && E.call(a) == o || !1
    }
    function Lb(a) {
        return typeof a == "string" || a && typeof a == "object" && E.call(a) == p || !1
    }
    function Mb(a) {
        return typeof a == "undefined"
    }
    function Nb(a) {
        var b = [];
        ub(a, function (a, c) {
            b.push(c)
        }), b = $(b, _(arguments, !0, !1, 1));
        var c = -1,
            d = b.length,
            e = {};
        while (++c < d) {
            var f = b[c];
            e[f] = a[f]
        }
        return e
    }
    function Ob(a) {
        var b = -1,
            c = mb(a),
            d = c.length,
            e = Array(d);
        while (++b < d) {
            var f = c[b];
            e[b] = [f, a[f]]
        }
        return e
    }
    function Pb(a) {
        var b = -1,
            c = _(arguments, !0, !1, 1),
            d = c.length,
            e = {};
        while (++b < d) {
            var f = c[b];
            f in a && (e[f] = a[f])
        }
        return e
    }
    function Qb(a) {
        var b = -1,
            c = mb(a),
            d = c.length,
            e = Array(d);
        while (++b < d) e[b] = a[c[b]];
        return e
    }
    function Rb(a, b) {
        var d = gb(),
            e = a ? a.length : 0,
            f = !1;
        return e && typeof e == "number" ? f = d(a, b) > -1 : vb(a, function (a) {
            return (f = a === b) && c
        }), f
    }
    function Tb(a, b, d) {
        var e = !0;
        b = Rc(b, d, 3);
        var f = -1,
            g = a ? a.length : 0;
        if (typeof g == "number") {
            while (++f < g) if (!(e = !! b(a[f], f, a))) break
        } else vb(a, function (a, d, f) {
            return !(e = !! b(a, d, f)) && c
        });
        return e
    }
    function Ub(a, b, c) {
        var d = [];
        b = Rc(b, c, 3);
        var e = -1,
            f = a ? a.length : 0;
        if (typeof f == "number") while (++e < f) {
            var g = a[e];
            b(g, e, a) && d.push(g)
        } else vb(a, function (a, c, e) {
            b(a, c, e) && d.push(a)
        });
        return d
    }
    function Vb(a, b, d) {
        b = Rc(b, d, 3);
        var e = -1,
            f = a ? a.length : 0;
        if (typeof f != "number") {
            var h;
            return vb(a, function (a, d, e) {
                if (b(a, d, e)) return h = a, c
            }), h
        }
        while (++e < f) {
            var g = a[e];
            if (b(g, e, a)) return g
        }
    }
    function Wb(a, b) {
        return nc(a, b, !0)
    }
    function Xb(a, b, d) {
        var e = -1,
            f = a ? a.length : 0;
        b = b && typeof d == "undefined" ? b : Y(b, d, 3);
        if (typeof f == "number") {
            while (++e < f) if (b(a[e], e, a) === c) break
        } else vb(a, b)
    }
    function Yb(a, b) {
        var d = a ? a.length : 0;
        if (typeof d == "number") {
            while (d--) if (b(a[d], d, a) === !1) break
        } else {
            var e = mb(a);
            d = e.length, vb(a, function (a, f, g) {
                return f = e ? e[--d] : --d, b(g[f], f, g) === !1 && c
            })
        }
    }
    function _b(a, b) {
        var c = A(arguments, 2),
            d = -1,
            e = typeof b == "function",
            f = a ? a.length : 0,
            g = Array(typeof f == "number" ? f : 0);
        return Xb(a, function (a) {
            g[++d] = (e ? b : a[b]).apply(a, c)
        }), g
    }
    function ac(a, b, c) {
        var d = -1,
            e = a ? a.length : 0;
        b = Rc(b, c, 3);
        if (typeof e == "number") {
            var f = Array(e);
            while (++d < e) f[d] = b(a[d], d, a)
        } else f = [], vb(a, function (a, c, e) {
            f[++d] = b(a, c, e)
        });
        return f
    }
    function bc(a, b, c) {
        var d = -Infinity,
            e = d;
        typeof b != "function" && c && c[b] === a && (b = null);
        var f = -1,
            g = a ? a.length : 0;
        if (b == null && typeof g == "number") while (++f < g) {
            var h = a[f];
            h > e && (e = h)
        } else b = Rc(b, c, 3), Xb(a, function (a, c, f) {
            var g = b(a, c, f);
            g > d && (d = g, e = a)
        });
        return e
    }
    function cc(a, b, c) {
        var d = Infinity,
            e = d;
        typeof b != "function" && c && c[b] === a && (b = null);
        var f = -1,
            g = a ? a.length : 0;
        if (b == null && typeof g == "number") while (++f < g) {
            var h = a[f];
            h < e && (e = h)
        } else b = Rc(b, c, 3), Xb(a, function (a, c, f) {
            var g = b(a, c, f);
            g < d && (d = g, e = a)
        });
        return e
    }
    function ec(a, b, c, d) {
        if (!a) return c;
        var e = arguments.length < 3;
        b = Rc(b, d, 4);
        var f = -1,
            g = a.length;
        if (typeof g == "number") {
            e && (c = a[++f]);
            while (++f < g) c = b(c, a[f], f, a)
        } else vb(a, function (a, d, f) {
            c = e ? (e = !1, a) : b(c, a, d, f)
        });
        return c
    }
    function fc(a, b, c, d) {
        var e = arguments.length < 3;
        return b = Rc(b, d, 4), Yb(a, function (a, d, f) {
            c = e ? (e = !1, a) : b(c, a, d, f)
        }), c
    }
    function gc(a, b, c) {
        return b = Rc(b, c, 3), Ub(a, function (a, c, d) {
            return !b(a, c, d)
        })
    }
    function hc(b, c, d) {
        b && typeof b.length != "number" && (b = Qb(b));
        if (c == null || d) return b ? b[bb(0, b.length - 1)] : a;
        var e = ic(b);
        return e.length = R(Q(0, c), e.length), e
    }
    function ic(a) {
        var b = -1,
            c = a ? a.length : 0,
            d = Array(typeof c == "number" ? c : 0);
        return Xb(a, function (a) {
            var c = bb(0, ++b);
            d[b] = d[c], d[c] = a
        }), d
    }
    function jc(a) {
        var b = a ? a.length : 0;
        return typeof b == "number" ? b : mb(a).length
    }
    function kc(a, b, d) {
        var e;
        b = Rc(b, d, 3);
        var f = -1,
            g = a ? a.length : 0;
        if (typeof g == "number") {
            while (++f < g) if (e = b(a[f], f, a)) break
        } else vb(a, function (a, d, f) {
            return (e = b(a, d, f)) && c
        });
        return !!e
    }
    function lc(a, b, c) {
        var d = -1,
            e = a ? a.length : 0,
            f = Array(typeof e == "number" ? e : 0);
        b = Rc(b, c, 3), Xb(a, function (a, c, e) {
            f[++d] = {
                criteria: [b(a, c, e)],
                index: d,
                value: a
            }
        }), e = f.length, f.sort(y);
        while (e--) f[e] = f[e].value;
        return f
    }
    function mc(a) {
        return kb(a) ? A(a) : a && typeof a.length == "number" ? ac(a) : Qb(a)
    }
    function nc(b, c, d) {
        return d && Cb(c) ? a : (d ? Vb : Ub)(b, c)
    }
    function oc(a) {
        var b = -1,
            c = a ? a.length : 0,
            d = [];
        while (++b < c) {
            var e = a[b];
            e && d.push(e)
        }
        return d
    }
    function pc(a) {
        return $(a, _(arguments, !0, !0, 1))
    }
    function qc(b, c, d) {
        var e = 0,
            f = b ? b.length : 0;
        if (typeof c != "number" && c != null) {
            var g = -1;
            c = Rc(c, d, 3);
            while (++g < f && c(b[g], g, b)) e++
        } else {
            e = c;
            if (e == null || d) return b ? b[0] : a
        }
        return A(b, 0, R(Q(0, e), f))
    }
    function rc(a, b) {
        return _(a, b)
    }
    function sc(a, b, c) {
        if (typeof c == "number") {
            var d = a ? a.length : 0;
            c = c < 0 ? Q(0, d + c) : c || 0
        } else if (c) {
            var e = zc(a, b);
            return a[e] === b ? e : -1
        }
        return x(a, b, c)
    }
    function tc(a, b, c) {
        var d = 0,
            e = a ? a.length : 0;
        if (typeof b != "number" && b != null) {
            var f = e;
            b = Rc(b, c, 3);
            while (f-- && b(a[f], f, a)) d++
        } else d = b == null || c ? 1 : b || d;
        return A(a, 0, R(Q(0, e - d), e))
    }
    function uc() {
        var a = [],
            b = -1,
            c = arguments.length;
        while (++b < c) {
            var d = arguments[b];
            (kb(d) || jb(d)) && a.push(d)
        }
        var e = a[0],
            f = -1,
            g = gb(),
            h = e ? e.length : 0,
            i = [];
        a: while (++f < h) {
            d = e[f];
            if (g(i, d) < 0) {
                var b = c;
                while (--b) if (g(a[b], d) < 0) continue a;
                i.push(d)
            }
        }
        return i
    }
    function vc(b, c, d) {
        var e = 0,
            f = b ? b.length : 0;
        if (typeof c != "number" && c != null) {
            var g = f;
            c = Rc(c, d, 3);
            while (g-- && c(b[g], g, b)) e++
        } else {
            e = c;
            if (e == null || d) return b ? b[f - 1] : a
        }
        return A(b, Q(0, f - e))
    }
    function wc(a, b, c) {
        var d = a ? a.length : 0;
        typeof c == "number" && (d = (c < 0 ? Q(0, d + c) : R(c, d - 1)) + 1);
        while (d--) if (a[d] === b) return d;
        return -1
    }
    function xc(a, b, c) {
        a = +a || 0, c = +c || 1, b == null && (b = a, a = 0);
        var d = -1,
            e = Q(0, G((b - a) / c)),
            f = Array(e);
        while (++d < e) f[d] = a, a += c;
        return f
    }
    function yc(a, b, c) {
        if (typeof b != "number" && b != null) {
            var d = 0,
                e = -1,
                f = a ? a.length : 0;
            b = Rc(b, c, 3);
            while (++e < f && b(a[e], e, a)) d++
        } else d = b == null || c ? 1 : Q(0, b);
        return A(a, d)
    }
    function zc(a, b, c, d) {
        var e = 0,
            f = a ? a.length : e;
        c = c ? Rc(c, d, 1) : Tc, b = c(b);
        while (e < f) {
            var g = e + f >>> 1;
            c(a[g]) < b ? e = g + 1 : f = g
        }
        return e
    }
    function Ac() {
        return cb(_(arguments, !0, !0))
    }
    function Bc(a, b, c, d) {
        return typeof b != "boolean" && b != null && (d = c, c = typeof b != "function" && d && d[b] === a ? null : b, b = !1), c != null && (c = Rc(c, d, 3)), cb(a, b, c)
    }
    function Cc(a) {
        return $(a, A(arguments, 1))
    }
    function Dc() {
        var a = -1,
            b = bc(dc(arguments, "length")),
            c = Array(b < 0 ? 0 : b);
        while (++a < b) c[a] = dc(arguments, a);
        return c
    }
    function Ec(a, b) {
        var c = -1,
            d = a ? a.length : 0,
            e = {};
        !b && d && !kb(a[0]) && (b = []);
        while (++c < d) {
            var f = a[c];
            b ? e[f] = b[c] : f && (e[f[0]] = f[1])
        }
        return e
    }
    function Fc(a, b) {
        if (!Fb(b)) throw new TypeError;
        return function () {
            if (--a < 1) return b.apply(this, arguments)
        }
    }
    function Gc(a, b) {
        return arguments.length > 2 ? eb(a, 17, A(arguments, 2), null, b) : eb(a, 1, null, null, b)
    }
    function Hc(a) {
        var b = arguments.length > 1 ? _(arguments, !0, !1, 1) : wb(a),
            c = -1,
            d = b.length;
        while (++c < d) {
            var e = b[c];
            a[e] = eb(a[e], 1, null, null, a)
        }
        return a
    }
    function Ic() {
        var a = arguments,
            b = a.length;
        while (b--) if (!Fb(a[b])) throw new TypeError;
        return function () {
            var b = arguments,
                c = a.length;
            while (c--) b = [a[c].apply(this, b)];
            return b[0]
        }
    }
    function Jc(b, c, d) {
        var e, f, g, h, i, j, k, l = 0,
            m = !1,
            n = !0;
        if (!Fb(b)) throw new TypeError;
        c = Q(0, c) || 0;
        if (d === !0) {
            var o = !0;
            n = !1
        } else Gb(d) && (o = d.leading, m = "maxWait" in d && (Q(c, d.maxWait) || 0), n = "trailing" in d ? d.trailing : n);
        var p = function () {
                var d = c - (Xc() - h);
                if (d <= 0) {
                    f && clearTimeout(f);
                    var m = k;
                    f = j = k = a, m && (l = Xc(), g = b.apply(i, e), !j && !f && (e = i = null))
                } else j = setTimeout(p, d)
            },
            q = function () {
                j && clearTimeout(j), f = j = k = a;
                if (n || m !== c) l = Xc(), g = b.apply(i, e), !j && !f && (e = i = null)
            };
        return function () {
            e = arguments, h = Xc(), i = this, k = n && (j || !o);
            if (m === !1) var a = o && !j;
            else {
                !f && !o && (l = h);
                var d = m - (h - l),
                    r = d <= 0;
                r ? (f && (f = clearTimeout(f)), l = h, g = b.apply(i, e)) : f || (f = setTimeout(q, d))
            }
            return r && j ? j = clearTimeout(j) : !j && c !== m && (j = setTimeout(p, c)), a && (r = !0, g = b.apply(i, e)), r && !j && !f && (e = i = null), g
        }
    }
    function Kc(b) {
        if (!Fb(b)) throw new TypeError;
        var c = A(arguments, 1);
        return setTimeout(function () {
            b.apply(a, c)
        }, 1)
    }
    function Lc(b, c) {
        if (!Fb(b)) throw new TypeError;
        var d = A(arguments, 2);
        return setTimeout(function () {
            b.apply(a, d)
        }, c)
    }
    function Mc(a, b) {
        var c = {};
        return function () {
            var e = b ? b.apply(this, arguments) : d + arguments[0];
            return I.call(c, e) ? c[e] : c[e] = a.apply(this, arguments)
        }
    }
    function Nc(a) {
        var b, c;
        if (!Fb(a)) throw new TypeError;
        return function () {
            return b ? c : (b = !0, c = a.apply(this, arguments), a = null, c)
        }
    }
    function Oc(a) {
        return eb(a, 16, A(arguments, 1))
    }
    function Pc(a, b, c) {
        var d = !0,
            e = !0;
        if (!Fb(a)) throw new TypeError;
        return c === !1 ? d = !1 : Gb(c) && (d = "leading" in c ? c.leading : d, e = "trailing" in c ? c.trailing : e), c = {}, c.leading = d, c.maxWait = b, c.trailing = e, Jc(a, b, c)
    }
    function Qc(a, b) {
        return eb(b, 16, [a])
    }
    function Rc(a, b, c) {
        var d = typeof a;
        if (a == null || d == "function") return Y(a, b, c);
        if (d != "object") return Yc(a);
        var e = mb(a);
        return function (b) {
            var c = e.length,
                d = !1;
            while (c--) if (!(d = b[e[c]] === a[e[c]])) break;
            return d
        }
    }
    function Sc(a) {
        return a == null ? "" : String(a).replace(qb, fb)
    }
    function Tc(a) {
        return a
    }
    function Uc(a) {
        Xb(wb(a), function (b) {
            var c = T[b] = a[b];
            T.prototype[b] = function () {
                var a = [this.__wrapped__];
                J.apply(a, arguments);
                var b = c.apply(T, a);
                return this.__chain__ ? new U(b, !0) : b
            }
        })
    }
    function Vc() {
        return s._ = D, this
    }
    function Wc() {}
    function Yc(a) {
        return function (b) {
            return b[a]
        }
    }
    function Zc(a, b) {
        return a == null && b == null && (b = 1), a = +a || 0, b == null ? (b = a, a = 0) : b = +b || 0, a + H(S() * (b - a + 1))
    }
    function $c(a, b) {
        if (a) {
            var c = a[b];
            return Fb(c) ? a[b]() : c
        }
    }
    function _c(a, b, c) {
        var d = T,
            e = d.templateSettings;
        a = String(a || ""), c = tb({}, c, e);
        var h = 0,
            i = "__p += '",
            j = c.variable,
            k = RegExp((c.escape || f).source + "|" + (c.interpolate || f).source + "|" + (c.evaluate || f).source + "|$", "g");
        a.replace(k, function (b, c, d, e, f) {
            return i += a.slice(h, f).replace(g, z), c && (i += "' +\n_.escape(" + c + ") +\n'"), e && (i += "';\n" + e + ";\n__p += '"), d && (i += "' +\n((__t = (" + d + ")) == null ? '' : __t) +\n'"), h = f + b.length, b
        }), i += "';\n", j || (j = "obj", i = "with (" + j + " || {}) {\n" + i + "\n}\n"), i = "function(" + j + ") {\n" + "var __t, __p = '', __j = Array.prototype.join;\n" + "function print() { __p += __j.call(arguments, '') }\n" + i + "return __p\n}";
        try {
            var l = Function("_", "return " + i)(d)
        } catch (m) {
            throw m.source = i, m
        }
        return b ? l(b) : (l.source = i, l)
    }
    function ad(a, b, c) {
        a = (a = +a) > -1 ? a : 0;
        var d = -1,
            e = Array(a);
        b = Y(b, c, 1);
        while (++d < a) e[d] = b(d);
        return e
    }
    function bd(a) {
        return a == null ? "" : String(a).replace(pb, ib)
    }
    function cd(a) {
        var c = ++b + "";
        return a ? a + c : c
    }
    function dd(a) {
        return a = new U(a), a.__chain__ = !0, a
    }
    function ed(a, b) {
        return b(a), a
    }
    function fd() {
        return this.__chain__ = !0, this
    }
    function gd() {
        return this.__wrapped__
    }
    var a, b = 0,
        c = {},
        d = +(new Date) + "",
        e = /<%=([\s\S]+?)%>/g,
        f = /($^)/,
        g = /['\n\r\t\u2028\u2029\\]/g,
        h = "[object Arguments]",
        i = "[object Array]",
        j = "[object Boolean]",
        k = "[object Date]",
        l = "[object Function]",
        m = "[object Number]",
        n = "[object Object]",
        o = "[object RegExp]",
        p = "[object String]",
        q = {
            "boolean": !1,
            "function": !0,
            object: !0,
            number: !1,
            string: !1,
            "undefined": !1
        },
        r = {
            "\\": "\\",
            "'": "'",
            "\n": "n",
            "\r": "r",
            "	": "t",
            "\u2028": "u2028",
            "\u2029": "u2029"
        },
        s = q[typeof window] && window || this,
        t = q[typeof exports] && exports && !exports.nodeType && exports,
        u = q[typeof module] && module && !module.nodeType && module,
        v = u && u.exports === t && t,
        w = q[typeof global] && global;
    w && (w.global === w || w.window === w) && (s = w);
    var B = [],
        C = Object.prototype,
        D = s._,
        E = C.toString,
        F = RegExp("^" + String(E).replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/toString| for [^\]]+/g, ".*?") + "$"),
        G = Math.ceil,
        H = Math.floor,
        I = C.hasOwnProperty,
        J = B.push,
        K = C.propertyIsEnumerable,
        L = hb(L = Object.create) && L,
        M = hb(M = Array.isArray) && M,
        N = s.isFinite,
        O = s.isNaN,
        P = hb(P = Object.keys) && P,
        Q = Math.max,
        R = Math.min,
        S = Math.random;
    U.prototype = T.prototype;
    var V = {};
    (function () {
        var a = {
            0: 1,
            length: 1
        };
        V.spliceObjects = (B.splice.call(a, 0, 1), !a[0])
    })(1), T.templateSettings = {
        escape: /<%-([\s\S]+?)%>/g,
        evaluate: /<%([\s\S]+?)%>/g,
        interpolate: e,
        variable: ""
    }, L || (X = function () {
        function a() {}
        return function (b) {
            if (Gb(b)) {
                a.prototype = b;
                var c = new a;
                a.prototype = null
            }
            return c || s.Object()
        }
    }()), jb(arguments) || (jb = function (a) {
        return a && typeof a == "object" && typeof a.length == "number" && I.call(a, "callee") && !K.call(a, "callee") || !1
    });
    var kb = M ||
    function (a) {
        return a && typeof a == "object" && typeof a.length == "number" && E.call(a) == i || !1
    }, lb = function (a) {
        var b, c = a,
            d = [];
        if (!c) return d;
        if (!q[typeof a]) return d;
        for (b in c) I.call(c, b) && d.push(b);
        return d
    }, mb = P ?
    function (a) {
        return Gb(a) ? P(a) : []
    } : lb, nb = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        '"': "&quot;",
        "'": "&#x27;"
    }, ob = yb(nb), pb = RegExp("(" + mb(ob).join("|") + ")", "g"), qb = RegExp("[" + mb(nb).join("") + "]", "g"), ub = function (a, b) {
        var d, e = a,
            f = e;
        if (!e) return f;
        if (!q[typeof e]) return f;
        for (d in e) if (b(e[d], d, a) === c) return f;
        return f
    }, vb = function (a, b) {
        var d, e = a,
            f = e;
        if (!e) return f;
        if (!q[typeof e]) return f;
        for (d in e) if (I.call(e, d) && b(e[d], d, a) === c) return f;
        return f
    };
    Fb(/x/) && (Fb = function (a) {
        return typeof a == "function" && E.call(a) == l
    });
    var Sb = db(function (a, b, c) {
        I.call(a, c) ? a[c]++ : a[c] = 1
    }),
        Zb = db(function (a, b, c) {
            (I.call(a, c) ? a[c] : a[c] = []).push(b)
        }),
        $b = db(function (a, b, c) {
            a[c] = b
        }),
        dc = ac,
        Xc = hb(Xc = Date.now) && Xc ||
    function () {
        return (new Date).getTime()
    };
    T.after = Fc, T.bind = Gc, T.bindAll = Hc, T.chain = dd, T.compact = oc, T.compose = Ic, T.countBy = Sb, T.debounce = Jc, T.defaults = tb, T.defer = Kc, T.delay = Lc, T.difference = pc, T.filter = Ub, T.flatten = rc, T.forEach = Xb, T.functions = wb, T.groupBy = Zb, T.indexBy = $b, T.initial = tc, T.intersection = uc, T.invert = yb, T.invoke = _b, T.keys = mb, T.map = ac, T.max = bc, T.memoize = Mc, T.min = cc, T.omit = Nb, T.once = Nc, T.pairs = Ob, T.partial = Oc, T.pick = Pb, T.pluck = dc, T.range = xc, T.reject = gc, T.rest = yc, T.shuffle = ic, T.sortBy = lc, T.tap = ed, T.throttle = Pc, T.times = ad, T.toArray = mc, T.union = Ac, T.uniq = Bc, T.values = Qb, T.where = nc, T.without = Cc, T.wrap = Qc, T.zip = Dc, T.collect = ac, T.drop = yc, T.each = Xb, T.extend = rb, T.methods = wb, T.object = Ec, T.select = Ub, T.tail = yc, T.unique = Bc, T.clone = sb, T.contains = Rb, T.escape = Sc, T.every = Tb, T.find = Vb, T.has = xb, T.identity = Tc, T.indexOf = sc, T.isArguments = jb, T.isArray = kb, T.isBoolean = zb, T.isDate = Ab, T.isElement = Bb, T.isEmpty = Cb, T.isEqual = Db, T.isFinite = Eb, T.isFunction = Fb, T.isNaN = Hb, T.isNull = Ib, T.isNumber = Jb, T.isObject = Gb, T.isRegExp = Kb, T.isString = Lb, T.isUndefined = Mb, T.lastIndexOf = wc, T.mixin = Uc, T.noConflict = Vc, T.random = Zc, T.reduce = ec, T.reduceRight = fc, T.result = $c, T.size = jc, T.some = kc, T.sortedIndex = zc, T.template = _c, T.unescape = bd, T.uniqueId = cd, T.all = Tb, T.any = kc, T.detect = Vb, T.findWhere = Wb, T.foldl = ec, T.foldr = fc, T.include = Rb, T.inject = ec, T.first = qc, T.last = vc, T.sample = hc, T.take = qc, T.head = qc, Uc(T), T.VERSION = "2.4.1", T.prototype.chain = fd, T.prototype.value = gd, Xb(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (a) {
        var b = B[a];
        T.prototype[a] = function () {
            var a = this.__wrapped__;
            return b.apply(a, arguments), !V.spliceObjects && a.length === 0 && delete a[0], this
        }
    }), Xb(["concat", "join", "slice"], function (a) {
        var b = B[a];
        T.prototype[a] = function () {
            var a = this.__wrapped__,
                c = b.apply(a, arguments);
            return this.__chain__ && (c = new U(c), c.__chain__ = !0), c
        }
    }), typeof define == "function" && typeof define.amd == "object" && define.amd ? (s._ = T, define("vendor/lodash.underscore", [], function () {
        return T
    })) : t && u ? v ? (u.exports = T)._ = T : t._ = T : s._ = T
}.call(this), define("underscore", ["vendor/lodash.underscore"], function () {
    return _.noConflict()
}), function (a, b) {
    function h(a) {
        var b = g[a] = {},
            c, d;
        a = a.split(/\s+/);
        for (c = 0, d = a.length; c < d; c++) b[a[c]] = !0;
        return b
    }
    function l(a, c, d) {
        if (d === b && a.nodeType === 1) {
            var e = "data-" + c.replace(k, "-$1").toLowerCase();
            d = a.getAttribute(e);
            if (typeof d == "string") {
                try {
                    d = d === "true" ? !0 : d === "false" ? !1 : d === "null" ? null : f.isNumeric(d) ? +d : j.test(d) ? f.parseJSON(d) : d
                } catch (g) {}
                f.data(a, c, d)
            } else d = b
        }
        return d
    }
    function m(a) {
        for (var b in a) {
            if (b === "data" && f.isEmptyObject(a[b])) continue;
            if (b !== "toJSON") return !1
        }
        return !0
    }
    function n(a, b, c) {
        var d = b + "defer",
            e = b + "queue",
            g = b + "mark",
            h = f._data(a, d);
        h && (c === "queue" || !f._data(a, e)) && (c === "mark" || !f._data(a, g)) && setTimeout(function () {
            !f._data(a, e) && !f._data(a, g) && (f.removeData(a, d, !0), h.fire())
        }, 0)
    }
    function J() {
        return !1
    }
    function K() {
        return !0
    }
    function S(a) {
        return !a || !a.parentNode || a.parentNode.nodeType === 11
    }
    function T(a, b, c) {
        b = b || 0;
        if (f.isFunction(b)) return f.grep(a, function (a, d) {
            var e = !! b.call(a, d, a);
            return e === c
        });
        if (b.nodeType) return f.grep(a, function (a, d) {
            return a === b === c
        });
        if (typeof b == "string") {
            var d = f.grep(a, function (a) {
                return a.nodeType === 1
            });
            if (O.test(b)) return f.filter(b, d, !c);
            b = f.filter(b, d)
        }
        return f.grep(a, function (a, d) {
            return f.inArray(a, b) >= 0 === c
        })
    }
    function U(a) {
        var b = V.split("|"),
            c = a.createDocumentFragment();
        if (c.createElement) while (b.length) c.createElement(b.pop());
        return c
    }
    function ib(a, b) {
        return f.nodeName(a, "table") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
    }
    function jb(a, b) {
        if (b.nodeType !== 1 || !f.hasData(a)) return;
        var c, d, e, g = f._data(a),
            h = f._data(b, g),
            i = g.events;
        if (i) {
            delete h.handle, h.events = {};
            for (c in i) for (d = 0, e = i[c].length; d < e; d++) f.event.add(b, c, i[c][d])
        }
        h.data && (h.data = f.extend({}, h.data))
    }
    function kb(a, b) {
        var c;
        if (b.nodeType !== 1) return;
        b.clearAttributes && b.clearAttributes(), b.mergeAttributes && b.mergeAttributes(a), c = b.nodeName.toLowerCase(), c === "object" ? b.outerHTML = a.outerHTML : c !== "input" || a.type !== "checkbox" && a.type !== "radio" ? c === "option" ? b.selected = a.defaultSelected : c === "input" || c === "textarea" ? b.defaultValue = a.defaultValue : c === "script" && b.text !== a.text && (b.text = a.text) : (a.checked && (b.defaultChecked = b.checked = a.checked), b.value !== a.value && (b.value = a.value)), b.removeAttribute(f.expando), b.removeAttribute("_submit_attached"), b.removeAttribute("_change_attached")
    }
    function lb(a) {
        return typeof a.getElementsByTagName != "undefined" ? a.getElementsByTagName("*") : typeof a.querySelectorAll != "undefined" ? a.querySelectorAll("*") : []
    }
    function mb(a) {
        if (a.type === "checkbox" || a.type === "radio") a.defaultChecked = a.checked
    }
    function nb(a) {
        var b = (a.nodeName || "").toLowerCase();
        b === "input" ? mb(a) : b !== "script" && typeof a.getElementsByTagName != "undefined" && f.grep(a.getElementsByTagName("input"), mb)
    }
    function ob(a) {
        var b = c.createElement("div");
        return hb.appendChild(b), b.innerHTML = a.outerHTML, b.firstChild
    }
    function Bb(a, b, c) {
        var d = b === "width" ? a.offsetWidth : a.offsetHeight,
            e = b === "width" ? 1 : 0,
            g = 4;
        if (d > 0) {
            if (c !== "border") for (; e < g; e += 2) c || (d -= parseFloat(f.css(a, "padding" + xb[e])) || 0), c === "margin" ? d += parseFloat(f.css(a, c + xb[e])) || 0 : d -= parseFloat(f.css(a, "border" + xb[e] + "Width")) || 0;
            return d + "px"
        }
        d = yb(a, b);
        if (d < 0 || d == null) d = a.style[b];
        if (tb.test(d)) return d;
        d = parseFloat(d) || 0;
        if (c) for (; e < g; e += 2) d += parseFloat(f.css(a, "padding" + xb[e])) || 0, c !== "padding" && (d += parseFloat(f.css(a, "border" + xb[e] + "Width")) || 0), c === "margin" && (d += parseFloat(f.css(a, c + xb[e])) || 0);
        return d + "px"
    }
    function Yb(a) {
        return function (b, c) {
            typeof b != "string" && (c = b, b = "*");
            if (f.isFunction(c)) {
                var d = b.toLowerCase().split(Ob),
                    e = 0,
                    g = d.length,
                    h, i, j;
                for (; e < g; e++) h = d[e], j = /^\+/.test(h), j && (h = h.substr(1) || "*"), i = a[h] = a[h] || [], i[j ? "unshift" : "push"](c)
            }
        }
    }
    function Zb(a, c, d, e, f, g) {
        f = f || c.dataTypes[0], g = g || {}, g[f] = !0;
        var h = a[f],
            i = 0,
            j = h ? h.length : 0,
            k = a === Sb,
            l;
        for (; i < j && (k || !l); i++) l = h[i](c, d, e), typeof l == "string" && (!k || g[l] ? l = b : (c.dataTypes.unshift(l), l = Zb(a, c, d, e, l, g)));
        return (k || !l) && !g["*"] && (l = Zb(a, c, d, e, "*", g)), l
    }
    function $b(a, c) {
        var d, e, g = f.ajaxSettings.flatOptions || {};
        for (d in c) c[d] !== b && ((g[d] ? a : e || (e = {}))[d] = c[d]);
        e && f.extend(!0, a, e)
    }
    function _b(a, b, c, d) {
        if (f.isArray(b)) f.each(b, function (b, e) {
            c || Db.test(a) ? d(a, e) : _b(a + "[" + (typeof e == "object" ? b : "") + "]", e, c, d)
        });
        else if (!c && f.type(b) === "object") for (var e in b) _b(a + "[" + e + "]", b[e], c, d);
        else d(a, b)
    }
    function ac(a, c, d) {
        var e = a.contents,
            f = a.dataTypes,
            g = a.responseFields,
            h, i, j, k;
        for (i in g) i in d && (c[g[i]] = d[i]);
        while (f[0] === "*") f.shift(), h === b && (h = a.mimeType || c.getResponseHeader("content-type"));
        if (h) for (i in e) if (e[i] && e[i].test(h)) {
            f.unshift(i);
            break
        }
        if (f[0] in d) j = f[0];
        else {
            for (i in d) {
                if (!f[0] || a.converters[i + " " + f[0]]) {
                    j = i;
                    break
                }
                k || (k = i)
            }
            j = j || k
        }
        if (j) return j !== f[0] && f.unshift(j), d[j]
    }
    function bc(a, c) {
        a.dataFilter && (c = a.dataFilter(c, a.dataType));
        var d = a.dataTypes,
            e = {},
            g, h, i = d.length,
            j, k = d[0],
            l, m, n, o, p;
        for (g = 1; g < i; g++) {
            if (g === 1) for (h in a.converters) typeof h == "string" && (e[h.toLowerCase()] = a.converters[h]);
            l = k, k = d[g];
            if (k === "*") k = l;
            else if (l !== "*" && l !== k) {
                m = l + " " + k, n = e[m] || e["* " + k];
                if (!n) {
                    p = b;
                    for (o in e) {
                        j = o.split(" ");
                        if (j[0] === l || j[0] === "*") {
                            p = e[j[1] + " " + k];
                            if (p) {
                                o = e[o], o === !0 ? n = p : p === !0 && (n = o);
                                break
                            }
                        }
                    }
                }!n && !p && f.error("No conversion from " + m.replace(" ", " to ")), n !== !0 && (c = n ? n(c) : p(o(c)))
            }
        }
        return c
    }
    function hc() {
        try {
            return new a.XMLHttpRequest
        } catch (b) {}
    }
    function ic() {
        try {
            return new a.ActiveXObject("Microsoft.XMLHTTP")
        } catch (b) {}
    }
    function rc() {
        return setTimeout(sc, 0), qc = f.now()
    }
    function sc() {
        qc = b
    }
    function tc(a, b) {
        var c = {};
        return f.each(pc.concat.apply([], pc.slice(0, b)), function () {
            c[this] = a
        }), c
    }
    function uc(a) {
        if (!jc[a]) {
            var b = c.body,
                d = f("<" + a + ">").appendTo(b),
                e = d.css("display");
            d.remove();
            if (e === "none" || e === "") {
                kc || (kc = c.createElement("iframe"), kc.frameBorder = kc.width = kc.height = 0), b.appendChild(kc);
                if (!lc || !kc.createElement) lc = (kc.contentWindow || kc.contentDocument).document, lc.write((f.support.boxModel ? "<!doctype html>" : "") + "<html><body>"), lc.close();
                d = lc.createElement(a), lc.body.appendChild(d), e = f.css(d, "display"), b.removeChild(kc)
            }
            jc[a] = e
        }
        return jc[a]
    }
    function yc(a) {
        return f.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1
    }
    var c = a.document,
        d = a.navigator,
        e = a.location,
        f = function () {
            function J() {
                if (e.isReady) return;
                try {
                    c.documentElement.doScroll("left")
                } catch (a) {
                    setTimeout(J, 1);
                    return
                }
                e.ready()
            }
            var e = function (a, b) {
                    return new e.fn.init(a, b, h)
                },
                f = a.jQuery,
                g = a.$,
                h, i = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
                j = /\S/,
                k = /^\s+/,
                l = /\s+$/,
                m = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
                n = /^[\],:{}\s]*$/,
                o = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
                p = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
                q = /(?:^|:|,)(?:\s*\[)+/g,
                r = /(webkit)[ \/]([\w.]+)/,
                s = /(opera)(?:.*version)?[ \/]([\w.]+)/,
                t = /(msie) ([\w.]+)/,
                u = /(mozilla)(?:.*? rv:([\w.]+))?/,
                v = /-([a-z]|[0-9])/ig,
                w = /^-ms-/,
                x = function (a, b) {
                    return (b + "").toUpperCase()
                },
                y = d.userAgent,
                z, A, B, C = Object.prototype.toString,
                D = Object.prototype.hasOwnProperty,
                E = Array.prototype.push,
                F = Array.prototype.slice,
                G = String.prototype.trim,
                H = Array.prototype.indexOf,
                I = {};
            return e.fn = e.prototype = {
                constructor: e,
                init: function (a, d, f) {
                    var g, h, j, k;
                    if (!a) return this;
                    if (a.nodeType) return this.context = this[0] = a, this.length = 1, this;
                    if (a === "body" && !d && c.body) return this.context = c, this[0] = c.body, this.selector = a, this.length = 1, this;
                    if (typeof a == "string") {
                        a.charAt(0) === "<" && a.charAt(a.length - 1) === ">" && a.length >= 3 ? g = [null, a, null] : g = i.exec(a);
                        if (g && (g[1] || !d)) {
                            if (g[1]) return d = d instanceof e ? d[0] : d, k = d ? d.ownerDocument || d : c, j = m.exec(a), j ? e.isPlainObject(d) ? (a = [c.createElement(j[1])], e.fn.attr.call(a, d, !0)) : a = [k.createElement(j[1])] : (j = e.buildFragment([g[1]], [k]), a = (j.cacheable ? e.clone(j.fragment) : j.fragment).childNodes), e.merge(this, a);
                            h = c.getElementById(g[2]);
                            if (h && h.parentNode) {
                                if (h.id !== g[2]) return f.find(a);
                                this.length = 1, this[0] = h
                            }
                            return this.context = c, this.selector = a, this
                        }
                        return !d || d.jquery ? (d || f).find(a) : this.constructor(d).find(a)
                    }
                    return e.isFunction(a) ? f.ready(a) : (a.selector !== b && (this.selector = a.selector, this.context = a.context), e.makeArray(a, this))
                },
                selector: "",
                jquery: "1.7.2",
                length: 0,
                size: function () {
                    return this.length
                },
                toArray: function () {
                    return F.call(this, 0)
                },
                get: function (a) {
                    return a == null ? this.toArray() : a < 0 ? this[this.length + a] : this[a]
                },
                pushStack: function (a, b, c) {
                    var d = this.constructor();
                    return e.isArray(a) ? E.apply(d, a) : e.merge(d, a), d.prevObject = this, d.context = this.context, b === "find" ? d.selector = this.selector + (this.selector ? " " : "") + c : b && (d.selector = this.selector + "." + b + "(" + c + ")"), d
                },
                each: function (a, b) {
                    return e.each(this, a, b)
                },
                ready: function (a) {
                    return e.bindReady(), A.add(a), this
                },
                eq: function (a) {
                    return a = +a, a === -1 ? this.slice(a) : this.slice(a, a + 1)
                },
                first: function () {
                    return this.eq(0)
                },
                last: function () {
                    return this.eq(-1)
                },
                slice: function () {
                    return this.pushStack(F.apply(this, arguments), "slice", F.call(arguments).join(","))
                },
                map: function (a) {
                    return this.pushStack(e.map(this, function (b, c) {
                        return a.call(b, c, b)
                    }))
                },
                end: function () {
                    return this.prevObject || this.constructor(null)
                },
                push: E,
                sort: [].sort,
                splice: [].splice
            }, e.fn.init.prototype = e.fn, e.extend = e.fn.extend = function () {
                var a, c, d, f, g, h, i = arguments[0] || {},
                    j = 1,
                    k = arguments.length,
                    l = !1;
                typeof i == "boolean" && (l = i, i = arguments[1] || {}, j = 2), typeof i != "object" && !e.isFunction(i) && (i = {}), k === j && (i = this, --j);
                for (; j < k; j++) if ((a = arguments[j]) != null) for (c in a) {
                    d = i[c], f = a[c];
                    if (i === f) continue;
                    l && f && (e.isPlainObject(f) || (g = e.isArray(f))) ? (g ? (g = !1, h = d && e.isArray(d) ? d : []) : h = d && e.isPlainObject(d) ? d : {}, i[c] = e.extend(l, h, f)) : f !== b && (i[c] = f)
                }
                return i
            }, e.extend({
                noConflict: function (b) {
                    return a.$ === e && (a.$ = g), b && a.jQuery === e && (a.jQuery = f), e
                },
                isReady: !1,
                readyWait: 1,
                holdReady: function (a) {
                    a ? e.readyWait++ : e.ready(!0)
                },
                ready: function (a) {
                    if (a === !0 && !--e.readyWait || a !== !0 && !e.isReady) {
                        if (!c.body) return setTimeout(e.ready, 1);
                        e.isReady = !0;
                        if (a !== !0 && --e.readyWait > 0) return;
                        A.fireWith(c, [e]), e.fn.trigger && e(c).trigger("ready").off("ready")
                    }
                },
                bindReady: function () {
                    if (A) return;
                    A = e.Callbacks("once memory");
                    if (c.readyState === "complete") return setTimeout(e.ready, 1);
                    if (c.addEventListener) c.addEventListener("DOMContentLoaded", B, !1), a.addEventListener("load", e.ready, !1);
                    else if (c.attachEvent) {
                        c.attachEvent("onreadystatechange", B), a.attachEvent("onload", e.ready);
                        var b = !1;
                        try {
                            b = a.frameElement == null
                        } catch (d) {}
                        c.documentElement.doScroll && b && J()
                    }
                },
                isFunction: function (a) {
                    return e.type(a) === "function"
                },
                isArray: Array.isArray ||
                function (a) {
                    return e.type(a) === "array"
                },
                isWindow: function (a) {
                    return a != null && a == a.window
                },
                isNumeric: function (a) {
                    return !isNaN(parseFloat(a)) && isFinite(a)
                },
                type: function (a) {
                    return a == null ? String(a) : I[C.call(a)] || "object"
                },
                isPlainObject: function (a) {
                    if (!a || e.type(a) !== "object" || a.nodeType || e.isWindow(a)) return !1;
                    try {
                        if (a.constructor && !D.call(a, "constructor") && !D.call(a.constructor.prototype, "isPrototypeOf")) return !1
                    } catch (c) {
                        return !1
                    }
                    var d;
                    for (d in a);
                    return d === b || D.call(a, d)
                },
                isEmptyObject: function (a) {
                    for (var b in a) return !1;
                    return !0
                },
                error: function (a) {
                    throw new Error(a)
                },
                parseJSON: function (b) {
                    if (typeof b != "string" || !b) return null;
                    b = e.trim(b);
                    if (a.JSON && a.JSON.parse) return a.JSON.parse(b);
                    if (n.test(b.replace(o, "@").replace(p, "]").replace(q, ""))) return (new Function("return " + b))();
                    e.error("Invalid JSON: " + b)
                },
                parseXML: function (c) {
                    if (typeof c != "string" || !c) return null;
                    var d, f;
                    try {
                        a.DOMParser ? (f = new DOMParser, d = f.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c))
                    } catch (g) {
                        d = b
                    }
                    return (!d || !d.documentElement || d.getElementsByTagName("parsererror").length) && e.error("Invalid XML: " + c), d
                },
                noop: function () {},
                globalEval: function (b) {
                    b && j.test(b) && (a.execScript ||
                    function (b) {
                        a.eval.call(a, b)
                    })(b)
                },
                camelCase: function (a) {
                    return a.replace(w, "ms-").replace(v, x)
                },
                nodeName: function (a, b) {
                    return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase()
                },
                each: function (a, c, d) {
                    var f, g = 0,
                        h = a.length,
                        i = h === b || e.isFunction(a);
                    if (d) {
                        if (i) {
                            for (f in a) if (c.apply(a[f], d) === !1) break
                        } else for (; g < h;) if (c.apply(a[g++], d) === !1) break
                    } else if (i) {
                        for (f in a) if (c.call(a[f], f, a[f]) === !1) break
                    } else for (; g < h;) if (c.call(a[g], g, a[g++]) === !1) break;
                    return a
                },
                trim: G ?
                function (a) {
                    return a == null ? "" : G.call(a)
                } : function (a) {
                    return a == null ? "" : a.toString().replace(k, "").replace(l, "")
                },
                makeArray: function (a, b) {
                    var c = b || [];
                    if (a != null) {
                        var d = e.type(a);
                        a.length == null || d === "string" || d === "function" || d === "regexp" || e.isWindow(a) ? E.call(c, a) : e.merge(c, a)
                    }
                    return c
                },
                inArray: function (a, b, c) {
                    var d;
                    if (b) {
                        if (H) return H.call(b, a, c);
                        d = b.length, c = c ? c < 0 ? Math.max(0, d + c) : c : 0;
                        for (; c < d; c++) if (c in b && b[c] === a) return c
                    }
                    return -1
                },
                merge: function (a, c) {
                    var d = a.length,
                        e = 0;
                    if (typeof c.length == "number") for (var f = c.length; e < f; e++) a[d++] = c[e];
                    else while (c[e] !== b) a[d++] = c[e++];
                    return a.length = d, a
                },
                grep: function (a, b, c) {
                    var d = [],
                        e;
                    c = !! c;
                    for (var f = 0, g = a.length; f < g; f++) e = !! b(a[f], f), c !== e && d.push(a[f]);
                    return d
                },
                map: function (a, c, d) {
                    var f, g, h = [],
                        i = 0,
                        j = a.length,
                        k = a instanceof e || j !== b && typeof j == "number" && (j > 0 && a[0] && a[j - 1] || j === 0 || e.isArray(a));
                    if (k) for (; i < j; i++) f = c(a[i], i, d), f != null && (h[h.length] = f);
                    else for (g in a) f = c(a[g], g, d), f != null && (h[h.length] = f);
                    return h.concat.apply([], h)
                },
                guid: 1,
                proxy: function (a, c) {
                    if (typeof c == "string") {
                        var d = a[c];
                        c = a, a = d
                    }
                    if (!e.isFunction(a)) return b;
                    var f = F.call(arguments, 2),
                        g = function () {
                            return a.apply(c, f.concat(F.call(arguments)))
                        };
                    return g.guid = a.guid = a.guid || g.guid || e.guid++, g
                },
                access: function (a, c, d, f, g, h, i) {
                    var j, k = d == null,
                        l = 0,
                        m = a.length;
                    if (d && typeof d == "object") {
                        for (l in d) e.access(a, c, l, d[l], 1, h, f);
                        g = 1
                    } else if (f !== b) {
                        j = i === b && e.isFunction(f), k && (j ? (j = c, c = function (a, b, c) {
                            return j.call(e(a), c)
                        }) : (c.call(a, f), c = null));
                        if (c) for (; l < m; l++) c(a[l], d, j ? f.call(a[l], l, c(a[l], d)) : f, i);
                        g = 1
                    }
                    return g ? a : k ? c.call(a) : m ? c(a[0], d) : h
                },
                now: function () {
                    return (new Date).getTime()
                },
                uaMatch: function (a) {
                    a = a.toLowerCase();
                    var b = r.exec(a) || s.exec(a) || t.exec(a) || a.indexOf("compatible") < 0 && u.exec(a) || [];
                    return {
                        browser: b[1] || "",
                        version: b[2] || "0"
                    }
                },
                sub: function () {
                    function a(b, c) {
                        return new a.fn.init(b, c)
                    }
                    e.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.sub = this.sub, a.fn.init = function (d, f) {
                        return f && f instanceof e && !(f instanceof a) && (f = a(f)), e.fn.init.call(this, d, f, b)
                    }, a.fn.init.prototype = a.fn;
                    var b = a(c);
                    return a
                },
                browser: {}
            }), e.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (a, b) {
                I["[object " + b + "]"] = b.toLowerCase()
            }), z = e.uaMatch(y), z.browser && (e.browser[z.browser] = !0, e.browser.version = z.version), e.browser.webkit && (e.browser.safari = !0), j.test(" ") && (k = /^[\s\xA0]+/, l = /[\s\xA0]+$/), h = e(c), c.addEventListener ? B = function () {
                c.removeEventListener("DOMContentLoaded", B, !1), e.ready()
            } : c.attachEvent && (B = function () {
                c.readyState === "complete" && (c.detachEvent("onreadystatechange", B), e.ready())
            }), e
        }(),
        g = {};
    f.Callbacks = function (a) {
        a = a ? g[a] || h(a) : {};
        var c = [],
            d = [],
            e, i, j, k, l, m, n = function (b) {
                var d, e, g, h, i;
                for (d = 0, e = b.length; d < e; d++) g = b[d], h = f.type(g), h === "array" ? n(g) : h === "function" && (!a.unique || !p.has(g)) && c.push(g)
            },
            o = function (b, f) {
                f = f || [], e = !a.memory || [b, f], i = !0, j = !0, m = k || 0, k = 0, l = c.length;
                for (; c && m < l; m++) if (c[m].apply(b, f) === !1 && a.stopOnFalse) {
                    e = !0;
                    break
                }
                j = !1, c && (a.once ? e === !0 ? p.disable() : c = [] : d && d.length && (e = d.shift(), p.fireWith(e[0], e[1])))
            },
            p = {
                add: function () {
                    if (c) {
                        var a = c.length;
                        n(arguments), j ? l = c.length : e && e !== !0 && (k = a, o(e[0], e[1]))
                    }
                    return this
                },
                remove: function () {
                    if (c) {
                        var b = arguments,
                            d = 0,
                            e = b.length;
                        for (; d < e; d++) for (var f = 0; f < c.length; f++) if (b[d] === c[f]) {
                            j && f <= l && (l--, f <= m && m--), c.splice(f--, 1);
                            if (a.unique) break
                        }
                    }
                    return this
                },
                has: function (a) {
                    if (c) {
                        var b = 0,
                            d = c.length;
                        for (; b < d; b++) if (a === c[b]) return !0
                    }
                    return !1
                },
                empty: function () {
                    return c = [], this
                },
                disable: function () {
                    return c = d = e = b, this
                },
                disabled: function () {
                    return !c
                },
                lock: function () {
                    return d = b, (!e || e === !0) && p.disable(), this
                },
                locked: function () {
                    return !d
                },
                fireWith: function (b, c) {
                    return d && (j ? a.once || d.push([b, c]) : (!a.once || !e) && o(b, c)), this
                },
                fire: function () {
                    return p.fireWith(this, arguments), this
                },
                fired: function () {
                    return !!i
                }
            };
        return p
    };
    var i = [].slice;
    f.extend({
        Deferred: function (a) {
            var b = f.Callbacks("once memory"),
                c = f.Callbacks("once memory"),
                d = f.Callbacks("memory"),
                e = "pending",
                g = {
                    resolve: b,
                    reject: c,
                    notify: d
                },
                h = {
                    done: b.add,
                    fail: c.add,
                    progress: d.add,
                    state: function () {
                        return e
                    },
                    isResolved: b.fired,
                    isRejected: c.fired,
                    then: function (a, b, c) {
                        return i.done(a).fail(b).progress(c), this
                    },
                    always: function () {
                        return i.done.apply(i, arguments).fail.apply(i, arguments), this
                    },
                    pipe: function (a, b, c) {
                        return f.Deferred(function (d) {
                            f.each({
                                done: [a, "resolve"],
                                fail: [b, "reject"],
                                progress: [c, "notify"]
                            }, function (a, b) {
                                var c = b[0],
                                    e = b[1],
                                    g;
                                f.isFunction(c) ? i[a](function () {
                                    g = c.apply(this, arguments), g && f.isFunction(g.promise) ? g.promise().then(d.resolve, d.reject, d.notify) : d[e + "With"](this === i ? d : this, [g])
                                }) : i[a](d[e])
                            })
                        }).promise()
                    },
                    promise: function (a) {
                        if (a == null) a = h;
                        else for (var b in h) a[b] = h[b];
                        return a
                    }
                },
                i = h.promise({}),
                j;
            for (j in g) i[j] = g[j].fire, i[j + "With"] = g[j].fireWith;
            return i.done(function () {
                e = "resolved"
            }, c.disable, d.lock).fail(function () {
                e = "rejected"
            }, b.disable, d.lock), a && a.call(i, i), i
        },
        when: function (a) {
            function l(a) {
                return function (c) {
                    b[a] = arguments.length > 1 ? i.call(arguments, 0) : c, --g || j.resolveWith(j, b)
                }
            }
            function m(a) {
                return function (b) {
                    e[a] = arguments.length > 1 ? i.call(arguments, 0) : b, j.notifyWith(k, e)
                }
            }
            var b = i.call(arguments, 0),
                c = 0,
                d = b.length,
                e = new Array(d),
                g = d,
                h = d,
                j = d <= 1 && a && f.isFunction(a.promise) ? a : f.Deferred(),
                k = j.promise();
            if (d > 1) {
                for (; c < d; c++) b[c] && b[c].promise && f.isFunction(b[c].promise) ? b[c].promise().then(l(c), j.reject, m(c)) : --g;
                g || j.resolveWith(j, b)
            } else j !== a && j.resolveWith(j, d ? [a] : []);
            return k
        }
    }), f.support = function () {
        var b, d, e, g, h, i, j, k, l, m, n, o, p = c.createElement("div"),
            q = c.documentElement;
        p.setAttribute("className", "t"), p.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>", d = p.getElementsByTagName("*"), e = p.getElementsByTagName("a")[0];
        if (!d || !d.length || !e) return {};
        g = c.createElement("select"), h = g.appendChild(c.createElement("option")), i = p.getElementsByTagName("input")[0], b = {
            leadingWhitespace: p.firstChild.nodeType === 3,
            tbody: !p.getElementsByTagName("tbody").length,
            htmlSerialize: !! p.getElementsByTagName("link").length,
            style: /top/.test(e.getAttribute("style")),
            hrefNormalized: e.getAttribute("href") === "/a",
            opacity: /^0.55/.test(e.style.opacity),
            cssFloat: !! e.style.cssFloat,
            checkOn: i.value === "on",
            optSelected: h.selected,
            getSetAttribute: p.className !== "t",
            enctype: !! c.createElement("form").enctype,
            html5Clone: c.createElement("nav").cloneNode(!0).outerHTML !== "<:nav></:nav>",
            submitBubbles: !0,
            changeBubbles: !0,
            focusinBubbles: !1,
            deleteExpando: !0,
            noCloneEvent: !0,
            inlineBlockNeedsLayout: !1,
            shrinkWrapBlocks: !1,
            reliableMarginRight: !0,
            pixelMargin: !0
        }, f.boxModel = b.boxModel = c.compatMode === "CSS1Compat", i.checked = !0, b.noCloneChecked = i.cloneNode(!0).checked, g.disabled = !0, b.optDisabled = !h.disabled;
        try {
            delete p.test
        } catch (r) {
            b.deleteExpando = !1
        }!p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent("onclick", function () {
            b.noCloneEvent = !1
        }), p.cloneNode(!0).fireEvent("onclick")), i = c.createElement("input"), i.value = "t", i.setAttribute("type", "radio"), b.radioValue = i.value === "t", i.setAttribute("checked", "checked"), i.setAttribute("name", "t"), p.appendChild(i), j = c.createDocumentFragment(), j.appendChild(p.lastChild), b.checkClone = j.cloneNode(!0).cloneNode(!0).lastChild.checked, b.appendChecked = i.checked, j.removeChild(i), j.appendChild(p);
        if (p.attachEvent) for (n in {
            submit: 1,
            change: 1,
            focusin: 1
        }) m = "on" + n, o = m in p, o || (p.setAttribute(m, "return;"), o = typeof p[m] == "function"), b[n + "Bubbles"] = o;
        return j.removeChild(p), j = g = h = p = i = null, f(function () {
            var d, e, g, h, i, j, l, m, n, q, r, s, t, u = c.getElementsByTagName("body")[0];
            if (!u) return;
            m = 1, t = "padding:0;margin:0;border:", r = "position:absolute;top:0;left:0;width:1px;height:1px;", s = t + "0;visibility:hidden;", n = "style='" + r + t + "5px solid #000;", q = "<div " + n + "display:block;'><div style='" + t + "0;display:block;overflow:hidden;'></div></div>" + "<table " + n + "' cellpadding='0' cellspacing='0'>" + "<tr><td></td></tr></table>", d = c.createElement("div"), d.style.cssText = s + "width:0;height:0;position:static;top:0;margin-top:" + m + "px", u.insertBefore(d, u.firstChild), p = c.createElement("div"), d.appendChild(p), p.innerHTML = "<table><tr><td style='" + t + "0;display:none'></td><td>t</td></tr></table>", k = p.getElementsByTagName("td"), o = k[0].offsetHeight === 0, k[0].style.display = "", k[1].style.display = "none", b.reliableHiddenOffsets = o && k[0].offsetHeight === 0, a.getComputedStyle && (p.innerHTML = "", l = c.createElement("div"), l.style.width = "0", l.style.marginRight = "0", p.style.width = "2px", p.appendChild(l), b.reliableMarginRight = (parseInt((a.getComputedStyle(l, null) || {
                marginRight: 0
            }).marginRight, 10) || 0) === 0), typeof p.style.zoom != "undefined" && (p.innerHTML = "", p.style.width = p.style.padding = "1px", p.style.border = 0, p.style.overflow = "hidden", p.style.display = "inline", p.style.zoom = 1, b.inlineBlockNeedsLayout = p.offsetWidth === 3, p.style.display = "block", p.style.overflow = "visible", p.innerHTML = "<div style='width:5px;'></div>", b.shrinkWrapBlocks = p.offsetWidth !== 3), p.style.cssText = r + s, p.innerHTML = q, e = p.firstChild, g = e.firstChild, i = e.nextSibling.firstChild.firstChild, j = {
                doesNotAddBorder: g.offsetTop !== 5,
                doesAddBorderForTableAndCells: i.offsetTop === 5
            }, g.style.position = "fixed", g.style.top = "20px", j.fixedPosition = g.offsetTop === 20 || g.offsetTop === 15, g.style.position = g.style.top = "", e.style.overflow = "hidden", e.style.position = "relative", j.subtractsBorderForOverflowNotVisible = g.offsetTop === -5, j.doesNotIncludeMarginInBodyOffset = u.offsetTop !== m, a.getComputedStyle && (p.style.marginTop = "1%", b.pixelMargin = (a.getComputedStyle(p, null) || {
                marginTop: 0
            }).marginTop !== "1%"), typeof d.style.zoom != "undefined" && (d.style.zoom = 1), u.removeChild(d), l = p = d = null, f.extend(b, j)
        }), b
    }();
    var j = /^(?:\{.*\}|\[.*\])$/,
        k = /([A-Z])/g;
    f.extend({
        cache: {},
        uuid: 0,
        expando: "jQuery" + (f.fn.jquery + Math.random()).replace(/\D/g, ""),
        noData: {
            embed: !0,
            object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
            applet: !0
        },
        hasData: function (a) {
            return a = a.nodeType ? f.cache[a[f.expando]] : a[f.expando], !! a && !m(a)
        },
        data: function (a, c, d, e) {
            if (!f.acceptData(a)) return;
            var g, h, i, j = f.expando,
                k = typeof c == "string",
                l = a.nodeType,
                m = l ? f.cache : a,
                n = l ? a[j] : a[j] && j,
                o = c === "events";
            if ((!n || !m[n] || !o && !e && !m[n].data) && k && d === b) return;
            n || (l ? a[j] = n = ++f.uuid : n = j), m[n] || (m[n] = {}, l || (m[n].toJSON = f.noop));
            if (typeof c == "object" || typeof c == "function") e ? m[n] = f.extend(m[n], c) : m[n].data = f.extend(m[n].data, c);
            return g = h = m[n], e || (h.data || (h.data = {}), h = h.data), d !== b && (h[f.camelCase(c)] = d), o && !h[c] ? g.events : (k ? (i = h[c], i == null && (i = h[f.camelCase(c)])) : i = h, i)
        },
        removeData: function (a, b, c) {
            if (!f.acceptData(a)) return;
            var d, e, g, h = f.expando,
                i = a.nodeType,
                j = i ? f.cache : a,
                k = i ? a[h] : h;
            if (!j[k]) return;
            if (b) {
                d = c ? j[k] : j[k].data;
                if (d) {
                    f.isArray(b) || (b in d ? b = [b] : (b = f.camelCase(b), b in d ? b = [b] : b = b.split(" ")));
                    for (e = 0, g = b.length; e < g; e++) delete d[b[e]];
                    if (!(c ? m : f.isEmptyObject)(d)) return
                }
            }
            if (!c) {
                delete j[k].data;
                if (!m(j[k])) return
            }
            f.support.deleteExpando || !j.setInterval ? delete j[k] : j[k] = null, i && (f.support.deleteExpando ? delete a[h] : a.removeAttribute ? a.removeAttribute(h) : a[h] = null)
        },
        _data: function (a, b, c) {
            return f.data(a, b, c, !0)
        },
        acceptData: function (a) {
            if (a.nodeName) {
                var b = f.noData[a.nodeName.toLowerCase()];
                if (b) return b !== !0 && a.getAttribute("classid") === b
            }
            return !0
        }
    }), f.fn.extend({
        data: function (a, c) {
            var d, e, g, h, i, j = this[0],
                k = 0,
                m = null;
            if (a === b) {
                if (this.length) {
                    m = f.data(j);
                    if (j.nodeType === 1 && !f._data(j, "parsedAttrs")) {
                        g = j.attributes;
                        for (i = g.length; k < i; k++) h = g[k].name, h.indexOf("data-") === 0 && (h = f.camelCase(h.substring(5)), l(j, h, m[h]));
                        f._data(j, "parsedAttrs", !0)
                    }
                }
                return m
            }
            return typeof a == "object" ? this.each(function () {
                f.data(this, a)
            }) : (d = a.split(".", 2), d[1] = d[1] ? "." + d[1] : "", e = d[1] + "!", f.access(this, function (c) {
                if (c === b) return m = this.triggerHandler("getData" + e, [d[0]]), m === b && j && (m = f.data(j, a), m = l(j, a, m)), m === b && d[1] ? this.data(d[0]) : m;
                d[1] = c, this.each(function () {
                    var b = f(this);
                    b.triggerHandler("setData" + e, d), f.data(this, a, c), b.triggerHandler("changeData" + e, d)
                })
            }, null, c, arguments.length > 1, null, !1))
        },
        removeData: function (a) {
            return this.each(function () {
                f.removeData(this, a)
            })
        }
    }), f.extend({
        _mark: function (a, b) {
            a && (b = (b || "fx") + "mark", f._data(a, b, (f._data(a, b) || 0) + 1))
        },
        _unmark: function (a, b, c) {
            a !== !0 && (c = b, b = a, a = !1);
            if (b) {
                c = c || "fx";
                var d = c + "mark",
                    e = a ? 0 : (f._data(b, d) || 1) - 1;
                e ? f._data(b, d, e) : (f.removeData(b, d, !0), n(b, c, "mark"))
            }
        },
        queue: function (a, b, c) {
            var d;
            if (a) return b = (b || "fx") + "queue", d = f._data(a, b), c && (!d || f.isArray(c) ? d = f._data(a, b, f.makeArray(c)) : d.push(c)), d || []
        },
        dequeue: function (a, b) {
            b = b || "fx";
            var c = f.queue(a, b),
                d = c.shift(),
                e = {};
            d === "inprogress" && (d = c.shift()), d && (b === "fx" && c.unshift("inprogress"), f._data(a, b + ".run", e), d.call(a, function () {
                f.dequeue(a, b)
            }, e)), c.length || (f.removeData(a, b + "queue " + b + ".run", !0), n(a, b, "queue"))
        }
    }), f.fn.extend({
        queue: function (a, c) {
            var d = 2;
            return typeof a != "string" && (c = a, a = "fx", d--), arguments.length < d ? f.queue(this[0], a) : c === b ? this : this.each(function () {
                var b = f.queue(this, a, c);
                a === "fx" && b[0] !== "inprogress" && f.dequeue(this, a)
            })
        },
        dequeue: function (a) {
            return this.each(function () {
                f.dequeue(this, a)
            })
        },
        delay: function (a, b) {
            return a = f.fx ? f.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function (b, c) {
                var d = setTimeout(b, a);
                c.stop = function () {
                    clearTimeout(d)
                }
            })
        },
        clearQueue: function (a) {
            return this.queue(a || "fx", [])
        },
        promise: function (a, c) {
            function m() {
                --h || d.resolveWith(e, [e])
            }
            typeof a != "string" && (c = a, a = b), a = a || "fx";
            var d = f.Deferred(),
                e = this,
                g = e.length,
                h = 1,
                i = a + "defer",
                j = a + "queue",
                k = a + "mark",
                l;
            while (g--) if (l = f.data(e[g], i, b, !0) || (f.data(e[g], j, b, !0) || f.data(e[g], k, b, !0)) && f.data(e[g], i, f.Callbacks("once memory"), !0)) h++, l.add(m);
            return m(), d.promise(c)
        }
    });
    var o = /[\n\t\r]/g,
        p = /\s+/,
        q = /\r/g,
        r = /^(?:button|input)$/i,
        s = /^(?:button|input|object|select|textarea)$/i,
        t = /^a(?:rea)?$/i,
        u = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
        v = f.support.getSetAttribute,
        w, x, y;
    f.fn.extend({
        attr: function (a, b) {
            return f.access(this, f.attr, a, b, arguments.length > 1)
        },
        removeAttr: function (a) {
            return this.each(function () {
                f.removeAttr(this, a)
            })
        },
        prop: function (a, b) {
            return f.access(this, f.prop, a, b, arguments.length > 1)
        },
        removeProp: function (a) {
            return a = f.propFix[a] || a, this.each(function () {
                try {
                    this[a] = b, delete this[a]
                } catch (c) {}
            })
        },
        addClass: function (a) {
            var b, c, d, e, g, h, i;
            if (f.isFunction(a)) return this.each(function (b) {
                f(this).addClass(a.call(this, b, this.className))
            });
            if (a && typeof a == "string") {
                b = a.split(p);
                for (c = 0, d = this.length; c < d; c++) {
                    e = this[c];
                    if (e.nodeType === 1) if (!e.className && b.length === 1) e.className = a;
                    else {
                        g = " " + e.className + " ";
                        for (h = 0, i = b.length; h < i; h++)~g.indexOf(" " + b[h] + " ") || (g += b[h] + " ");
                        e.className = f.trim(g)
                    }
                }
            }
            return this
        },
        removeClass: function (a) {
            var c, d, e, g, h, i, j;
            if (f.isFunction(a)) return this.each(function (b) {
                f(this).removeClass(a.call(this, b, this.className))
            });
            if (a && typeof a == "string" || a === b) {
                c = (a || "").split(p);
                for (d = 0, e = this.length; d < e; d++) {
                    g = this[d];
                    if (g.nodeType === 1 && g.className) if (a) {
                        h = (" " + g.className + " ").replace(o, " ");
                        for (i = 0, j = c.length; i < j; i++) h = h.replace(" " + c[i] + " ", " ");
                        g.className = f.trim(h)
                    } else g.className = ""
                }
            }
            return this
        },
        toggleClass: function (a, b) {
            var c = typeof a,
                d = typeof b == "boolean";
            return f.isFunction(a) ? this.each(function (c) {
                f(this).toggleClass(a.call(this, c, this.className, b), b)
            }) : this.each(function () {
                if (c === "string") {
                    var e, g = 0,
                        h = f(this),
                        i = b,
                        j = a.split(p);
                    while (e = j[g++]) i = d ? i : !h.hasClass(e), h[i ? "addClass" : "removeClass"](e)
                } else if (c === "undefined" || c === "boolean") this.className && f._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : f._data(this, "__className__") || ""
            })
        },
        hasClass: function (a) {
            var b = " " + a + " ",
                c = 0,
                d = this.length;
            for (; c < d; c++) if (this[c].nodeType === 1 && (" " + this[c].className + " ").replace(o, " ").indexOf(b) > -1) return !0;
            return !1
        },
        val: function (a) {
            var c, d, e, g = this[0];
            if (!arguments.length) {
                if (g) return c = f.valHooks[g.type] || f.valHooks[g.nodeName.toLowerCase()], c && "get" in c && (d = c.get(g, "value")) !== b ? d : (d = g.value, typeof d == "string" ? d.replace(q, "") : d == null ? "" : d);
                return
            }
            return e = f.isFunction(a), this.each(function (d) {
                var g = f(this),
                    h;
                if (this.nodeType !== 1) return;
                e ? h = a.call(this, d, g.val()) : h = a, h == null ? h = "" : typeof h == "number" ? h += "" : f.isArray(h) && (h = f.map(h, function (a) {
                    return a == null ? "" : a + ""
                })), c = f.valHooks[this.type] || f.valHooks[this.nodeName.toLowerCase()];
                if (!c || !("set" in c) || c.set(this, h, "value") === b) this.value = h
            })
        }
    }), f.extend({
        valHooks: {
            option: {
                get: function (a) {
                    var b = a.attributes.value;
                    return !b || b.specified ? a.value : a.text
                }
            },
            select: {
                get: function (a) {
                    var b, c, d, e, g = a.selectedIndex,
                        h = [],
                        i = a.options,
                        j = a.type === "select-one";
                    if (g < 0) return null;
                    c = j ? g : 0, d = j ? g + 1 : i.length;
                    for (; c < d; c++) {
                        e = i[c];
                        if (e.selected && (f.support.optDisabled ? !e.disabled : e.getAttribute("disabled") === null) && (!e.parentNode.disabled || !f.nodeName(e.parentNode, "optgroup"))) {
                            b = f(e).val();
                            if (j) return b;
                            h.push(b)
                        }
                    }
                    return j && !h.length && i.length ? f(i[g]).val() : h
                },
                set: function (a, b) {
                    var c = f.makeArray(b);
                    return f(a).find("option").each(function () {
                        this.selected = f.inArray(f(this).val(), c) >= 0
                    }), c.length || (a.selectedIndex = -1), c
                }
            }
        },
        attrFn: {
            val: !0,
            css: !0,
            html: !0,
            text: !0,
            data: !0,
            width: !0,
            height: !0,
            offset: !0
        },
        attr: function (a, c, d, e) {
            var g, h, i, j = a.nodeType;
            if (!a || j === 3 || j === 8 || j === 2) return;
            if (e && c in f.attrFn) return f(a)[c](d);
            if (typeof a.getAttribute == "undefined") return f.prop(a, c, d);
            i = j !== 1 || !f.isXMLDoc(a), i && (c = c.toLowerCase(), h = f.attrHooks[c] || (u.test(c) ? x : w));
            if (d !== b) {
                if (d === null) {
                    f.removeAttr(a, c);
                    return
                }
                return h && "set" in h && i && (g = h.set(a, d, c)) !== b ? g : (a.setAttribute(c, "" + d), d)
            }
            return h && "get" in h && i && (g = h.get(a, c)) !== null ? g : (g = a.getAttribute(c), g === null ? b : g)
        },
        removeAttr: function (a, b) {
            var c, d, e, g, h, i = 0;
            if (b && a.nodeType === 1) {
                d = b.toLowerCase().split(p), g = d.length;
                for (; i < g; i++) e = d[i], e && (c = f.propFix[e] || e, h = u.test(e), h || f.attr(a, e, ""), a.removeAttribute(v ? e : c), h && c in a && (a[c] = !1))
            }
        },
        attrHooks: {
            type: {
                set: function (a, b) {
                    if (r.test(a.nodeName) && a.parentNode) f.error("type property can't be changed");
                    else if (!f.support.radioValue && b === "radio" && f.nodeName(a, "input")) {
                        var c = a.value;
                        return a.setAttribute("type", b), c && (a.value = c), b
                    }
                }
            },
            value: {
                get: function (a, b) {
                    return w && f.nodeName(a, "button") ? w.get(a, b) : b in a ? a.value : null
                },
                set: function (a, b, c) {
                    if (w && f.nodeName(a, "button")) return w.set(a, b, c);
                    a.value = b
                }
            }
        },
        propFix: {
            tabindex: "tabIndex",
            readonly: "readOnly",
            "for": "htmlFor",
            "class": "className",
            maxlength: "maxLength",
            cellspacing: "cellSpacing",
            cellpadding: "cellPadding",
            rowspan: "rowSpan",
            colspan: "colSpan",
            usemap: "useMap",
            frameborder: "frameBorder",
            contenteditable: "contentEditable"
        },
        prop: function (a, c, d) {
            var e, g, h, i = a.nodeType;
            if (!a || i === 3 || i === 8 || i === 2) return;
            return h = i !== 1 || !f.isXMLDoc(a), h && (c = f.propFix[c] || c, g = f.propHooks[c]), d !== b ? g && "set" in g && (e = g.set(a, d, c)) !== b ? e : a[c] = d : g && "get" in g && (e = g.get(a, c)) !== null ? e : a[c]
        },
        propHooks: {
            tabIndex: {
                get: function (a) {
                    var c = a.getAttributeNode("tabindex");
                    return c && c.specified ? parseInt(c.value, 10) : s.test(a.nodeName) || t.test(a.nodeName) && a.href ? 0 : b
                }
            }
        }
    }), f.attrHooks.tabindex = f.propHooks.tabIndex, x = {
        get: function (a, c) {
            var d, e = f.prop(a, c);
            return e === !0 || typeof e != "boolean" && (d = a.getAttributeNode(c)) && d.nodeValue !== !1 ? c.toLowerCase() : b
        },
        set: function (a, b, c) {
            var d;
            return b === !1 ? f.removeAttr(a, c) : (d = f.propFix[c] || c, d in a && (a[d] = !0), a.setAttribute(c, c.toLowerCase())), c
        }
    }, v || (y = {
        name: !0,
        id: !0,
        coords: !0
    }, w = f.valHooks.button = {
        get: function (a, c) {
            var d;
            return d = a.getAttributeNode(c), d && (y[c] ? d.nodeValue !== "" : d.specified) ? d.nodeValue : b
        },
        set: function (a, b, d) {
            var e = a.getAttributeNode(d);
            return e || (e = c.createAttribute(d), a.setAttributeNode(e)), e.nodeValue = b + ""
        }
    }, f.attrHooks.tabindex.set = w.set, f.each(["width", "height"], function (a, b) {
        f.attrHooks[b] = f.extend(f.attrHooks[b], {
            set: function (a, c) {
                if (c === "") return a.setAttribute(b, "auto"), c
            }
        })
    }), f.attrHooks.contenteditable = {
        get: w.get,
        set: function (a, b, c) {
            b === "" && (b = "false"), w.set(a, b, c)
        }
    }), f.support.hrefNormalized || f.each(["href", "src", "width", "height"], function (a, c) {
        f.attrHooks[c] = f.extend(f.attrHooks[c], {
            get: function (a) {
                var d = a.getAttribute(c, 2);
                return d === null ? b : d
            }
        })
    }), f.support.style || (f.attrHooks.style = {
        get: function (a) {
            return a.style.cssText.toLowerCase() || b
        },
        set: function (a, b) {
            return a.style.cssText = "" + b
        }
    }), f.support.optSelected || (f.propHooks.selected = f.extend(f.propHooks.selected, {
        get: function (a) {
            var b = a.parentNode;
            return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null
        }
    })), f.support.enctype || (f.propFix.enctype = "encoding"), f.support.checkOn || f.each(["radio", "checkbox"], function () {
        f.valHooks[this] = {
            get: function (a) {
                return a.getAttribute("value") === null ? "on" : a.value
            }
        }
    }), f.each(["radio", "checkbox"], function () {
        f.valHooks[this] = f.extend(f.valHooks[this], {
            set: function (a, b) {
                if (f.isArray(b)) return a.checked = f.inArray(f(a).val(), b) >= 0
            }
        })
    });
    var z = /^(?:textarea|input|select)$/i,
        A = /^([^\.]*)?(?:\.(.+))?$/,
        B = /(?:^|\s)hover(\.\S+)?\b/,
        C = /^key/,
        D = /^(?:mouse|contextmenu)|click/,
        E = /^(?:focusinfocus|focusoutblur)$/,
        F = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
        G = function (a) {
            var b = F.exec(a);
            return b && (b[1] = (b[1] || "").toLowerCase(), b[3] = b[3] && new RegExp("(?:^|\\s)" + b[3] + "(?:\\s|$)")), b
        },
        H = function (a, b) {
            var c = a.attributes || {};
            return (!b[1] || a.nodeName.toLowerCase() === b[1]) && (!b[2] || (c.id || {}).value === b[2]) && (!b[3] || b[3].test((c["class"] || {}).value))
        },
        I = function (a) {
            return f.event.special.hover ? a : a.replace(B, "mouseenter$1 mouseleave$1")
        };
    f.event = {
        add: function (a, c, d, e, g) {
            var h, i, j, k, l, m, n, o, p, q, r, s;
            if (a.nodeType === 3 || a.nodeType === 8 || !c || !d || !(h = f._data(a))) return;
            d.handler && (p = d, d = p.handler, g = p.selector), d.guid || (d.guid = f.guid++), j = h.events, j || (h.events = j = {}), i = h.handle, i || (h.handle = i = function (a) {
                return typeof f == "undefined" || !! a && f.event.triggered === a.type ? b : f.event.dispatch.apply(i.elem, arguments)
            }, i.elem = a), c = f.trim(I(c)).split(" ");
            for (k = 0; k < c.length; k++) {
                l = A.exec(c[k]) || [], m = l[1], n = (l[2] || "").split(".").sort(), s = f.event.special[m] || {}, m = (g ? s.delegateType : s.bindType) || m, s = f.event.special[m] || {}, o = f.extend({
                    type: m,
                    origType: l[1],
                    data: e,
                    handler: d,
                    guid: d.guid,
                    selector: g,
                    quick: g && G(g),
                    namespace: n.join(".")
                }, p), r = j[m];
                if (!r) {
                    r = j[m] = [], r.delegateCount = 0;
                    if (!s.setup || s.setup.call(a, e, n, i) === !1) a.addEventListener ? a.addEventListener(m, i, !1) : a.attachEvent && a.attachEvent("on" + m, i)
                }
                s.add && (s.add.call(a, o), o.handler.guid || (o.handler.guid = d.guid)), g ? r.splice(r.delegateCount++, 0, o) : r.push(o), f.event.global[m] = !0
            }
            a = null
        },
        global: {},
        remove: function (a, b, c, d, e) {
            var g = f.hasData(a) && f._data(a),
                h, i, j, k, l, m, n, o, p, q, r, s;
            if (!g || !(o = g.events)) return;
            b = f.trim(I(b || "")).split(" ");
            for (h = 0; h < b.length; h++) {
                i = A.exec(b[h]) || [], j = k = i[1], l = i[2];
                if (!j) {
                    for (j in o) f.event.remove(a, j + b[h], c, d, !0);
                    continue
                }
                p = f.event.special[j] || {}, j = (d ? p.delegateType : p.bindType) || j, r = o[j] || [], m = r.length, l = l ? new RegExp("(^|\\.)" + l.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
                for (n = 0; n < r.length; n++) s = r[n], (e || k === s.origType) && (!c || c.guid === s.guid) && (!l || l.test(s.namespace)) && (!d || d === s.selector || d === "**" && s.selector) && (r.splice(n--, 1), s.selector && r.delegateCount--, p.remove && p.remove.call(a, s));
                r.length === 0 && m !== r.length && ((!p.teardown || p.teardown.call(a, l) === !1) && f.removeEvent(a, j, g.handle), delete o[j])
            }
            f.isEmptyObject(o) && (q = g.handle, q && (q.elem = null), f.removeData(a, ["events", "handle"], !0))
        },
        customEvent: {
            getData: !0,
            setData: !0,
            changeData: !0
        },
        trigger: function (c, d, e, g) {
            if (!e || e.nodeType !== 3 && e.nodeType !== 8) {
                var h = c.type || c,
                    i = [],
                    j, k, l, m, n, o, p, q, r, s;
                if (E.test(h + f.event.triggered)) return;
                h.indexOf("!") >= 0 && (h = h.slice(0, -1), k = !0), h.indexOf(".") >= 0 && (i = h.split("."), h = i.shift(), i.sort());
                if ((!e || f.event.customEvent[h]) && !f.event.global[h]) return;
                c = typeof c == "object" ? c[f.expando] ? c : new f.Event(h, c) : new f.Event(h), c.type = h, c.isTrigger = !0, c.exclusive = k, c.namespace = i.join("."), c.namespace_re = c.namespace ? new RegExp("(^|\\.)" + i.join("\\.(?:.*\\.)?") + "(\\.|$)") : null, o = h.indexOf(":") < 0 ? "on" + h : "";
                if (!e) {
                    j = f.cache;
                    for (l in j) j[l].events && j[l].events[h] && f.event.trigger(c, d, j[l].handle.elem, !0);
                    return
                }
                c.result = b, c.target || (c.target = e), d = d != null ? f.makeArray(d) : [], d.unshift(c), p = f.event.special[h] || {};
                if (p.trigger && p.trigger.apply(e, d) === !1) return;
                r = [
                    [e, p.bindType || h]
                ];
                if (!g && !p.noBubble && !f.isWindow(e)) {
                    s = p.delegateType || h, m = E.test(s + h) ? e : e.parentNode, n = null;
                    for (; m; m = m.parentNode) r.push([m, s]), n = m;
                    n && n === e.ownerDocument && r.push([n.defaultView || n.parentWindow || a, s])
                }
                for (l = 0; l < r.length && !c.isPropagationStopped(); l++) m = r[l][0], c.type = r[l][1], q = (f._data(m, "events") || {})[c.type] && f._data(m, "handle"), q && q.apply(m, d), q = o && m[o], q && f.acceptData(m) && q.apply(m, d) === !1 && c.preventDefault();
                return c.type = h, !g && !c.isDefaultPrevented() && (!p._default || p._default.apply(e.ownerDocument, d) === !1) && (h !== "click" || !f.nodeName(e, "a")) && f.acceptData(e) && o && e[h] && (h !== "focus" && h !== "blur" || c.target.offsetWidth !== 0) && !f.isWindow(e) && (n = e[o], n && (e[o] = null), f.event.triggered = h, e[h](), f.event.triggered = b, n && (e[o] = n)), c.result
            }
            return
        },
        dispatch: function (c) {
            c = f.event.fix(c || a.event);
            var d = (f._data(this, "events") || {})[c.type] || [],
                e = d.delegateCount,
                g = [].slice.call(arguments, 0),
                h = !c.exclusive && !c.namespace,
                i = f.event.special[c.type] || {},
                j = [],
                k, l, m, n, o, p, q, r, s, t, u;
            g[0] = c, c.delegateTarget = this;
            if (i.preDispatch && i.preDispatch.call(this, c) === !1) return;
            if (e && (!c.button || c.type !== "click")) {
                n = f(this), n.context = this.ownerDocument || this;
                for (m = c.target; m != this; m = m.parentNode || this) if (m.disabled !== !0) {
                    p = {}, r = [], n[0] = m;
                    for (k = 0; k < e; k++) s = d[k], t = s.selector, p[t] === b && (p[t] = s.quick ? H(m, s.quick) : n.is(t)), p[t] && r.push(s);
                    r.length && j.push({
                        elem: m,
                        matches: r
                    })
                }
            }
            d.length > e && j.push({
                elem: this,
                matches: d.slice(e)
            });
            for (k = 0; k < j.length && !c.isPropagationStopped(); k++) {
                q = j[k], c.currentTarget = q.elem;
                for (l = 0; l < q.matches.length && !c.isImmediatePropagationStopped(); l++) {
                    s = q.matches[l];
                    if (h || !c.namespace && !s.namespace || c.namespace_re && c.namespace_re.test(s.namespace)) c.data = s.data, c.handleObj = s, o = ((f.event.special[s.origType] || {}).handle || s.handler).apply(q.elem, g), o !== b && (c.result = o, o === !1 && (c.preventDefault(), c.stopPropagation()))
                }
            }
            return i.postDispatch && i.postDispatch.call(this, c), c.result
        },
        props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
        fixHooks: {},
        keyHooks: {
            props: "char charCode key keyCode".split(" "),
            filter: function (a, b) {
                return a.which == null && (a.which = b.charCode != null ? b.charCode : b.keyCode), a
            }
        },
        mouseHooks: {
            props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
            filter: function (a, d) {
                var e, f, g, h = d.button,
                    i = d.fromElement;
                return a.pageX == null && d.clientX != null && (e = a.target.ownerDocument || c, f = e.documentElement, g = e.body, a.pageX = d.clientX + (f && f.scrollLeft || g && g.scrollLeft || 0) - (f && f.clientLeft || g && g.clientLeft || 0), a.pageY = d.clientY + (f && f.scrollTop || g && g.scrollTop || 0) - (f && f.clientTop || g && g.clientTop || 0)), !a.relatedTarget && i && (a.relatedTarget = i === a.target ? d.toElement : i), !a.which && h !== b && (a.which = h & 1 ? 1 : h & 2 ? 3 : h & 4 ? 2 : 0), a
            }
        },
        fix: function (a) {
            if (a[f.expando]) return a;
            var d, e, g = a,
                h = f.event.fixHooks[a.type] || {},
                i = h.props ? this.props.concat(h.props) : this.props;
            a = f.Event(g);
            for (d = i.length; d;) e = i[--d], a[e] = g[e];
            return a.target || (a.target = g.srcElement || c), a.target.nodeType === 3 && (a.target = a.target.parentNode), a.metaKey === b && (a.metaKey = a.ctrlKey), h.filter ? h.filter(a, g) : a
        },
        special: {
            ready: {
                setup: f.bindReady
            },
            load: {
                noBubble: !0
            },
            focus: {
                delegateType: "focusin"
            },
            blur: {
                delegateType: "focusout"
            },
            beforeunload: {
                setup: function (a, b, c) {
                    f.isWindow(this) && (this.onbeforeunload = c)
                },
                teardown: function (a, b) {
                    this.onbeforeunload === b && (this.onbeforeunload = null)
                }
            }
        },
        simulate: function (a, b, c, d) {
            var e = f.extend(new f.Event, c, {
                type: a,
                isSimulated: !0,
                originalEvent: {}
            });
            d ? f.event.trigger(e, null, b) : f.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
        }
    }, f.event.handle = f.event.dispatch, f.removeEvent = c.removeEventListener ?
    function (a, b, c) {
        a.removeEventListener && a.removeEventListener(b, c, !1)
    } : function (a, b, c) {
        a.detachEvent && a.detachEvent("on" + b, c)
    }, f.Event = function (a, b) {
        if (!(this instanceof f.Event)) return new f.Event(a, b);
        a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? K : J) : this.type = a, b && f.extend(this, b), this.timeStamp = a && a.timeStamp || f.now(), this[f.expando] = !0
    }, f.Event.prototype = {
        preventDefault: function () {
            this.isDefaultPrevented = K;
            var a = this.originalEvent;
            if (!a) return;
            a.preventDefault ? a.preventDefault() : a.returnValue = !1
        },
        stopPropagation: function () {
            this.isPropagationStopped = K;
            var a = this.originalEvent;
            if (!a) return;
            a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0
        },
        stopImmediatePropagation: function () {
            this.isImmediatePropagationStopped = K, this.stopPropagation()
        },
        isDefaultPrevented: J,
        isPropagationStopped: J,
        isImmediatePropagationStopped: J
    }, f.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout"
    }, function (a, b) {
        f.event.special[a] = {
            delegateType: b,
            bindType: b,
            handle: function (a) {
                var c = this,
                    d = a.relatedTarget,
                    e = a.handleObj,
                    g = e.selector,
                    h;
                if (!d || d !== c && !f.contains(c, d)) a.type = e.origType, h = e.handler.apply(this, arguments), a.type = b;
                return h
            }
        }
    }), f.support.submitBubbles || (f.event.special.submit = {
        setup: function () {
            if (f.nodeName(this, "form")) return !1;
            f.event.add(this, "click._submit keypress._submit", function (a) {
                var c = a.target,
                    d = f.nodeName(c, "input") || f.nodeName(c, "button") ? c.form : b;
                d && !d._submit_attached && (f.event.add(d, "submit._submit", function (a) {
                    a._submit_bubble = !0
                }), d._submit_attached = !0)
            })
        },
        postDispatch: function (a) {
            a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && f.event.simulate("submit", this.parentNode, a, !0))
        },
        teardown: function () {
            if (f.nodeName(this, "form")) return !1;
            f.event.remove(this, "._submit")
        }
    }), f.support.changeBubbles || (f.event.special.change = {
        setup: function () {
            if (z.test(this.nodeName)) {
                if (this.type === "checkbox" || this.type === "radio") f.event.add(this, "propertychange._change", function (a) {
                    a.originalEvent.propertyName === "checked" && (this._just_changed = !0)
                }), f.event.add(this, "click._change", function (a) {
                    this._just_changed && !a.isTrigger && (this._just_changed = !1, f.event.simulate("change", this, a, !0))
                });
                return !1
            }
            f.event.add(this, "beforeactivate._change", function (a) {
                var b = a.target;
                z.test(b.nodeName) && !b._change_attached && (f.event.add(b, "change._change", function (a) {
                    this.parentNode && !a.isSimulated && !a.isTrigger && f.event.simulate("change", this.parentNode, a, !0)
                }), b._change_attached = !0)
            })
        },
        handle: function (a) {
            var b = a.target;
            if (this !== b || a.isSimulated || a.isTrigger || b.type !== "radio" && b.type !== "checkbox") return a.handleObj.handler.apply(this, arguments)
        },
        teardown: function () {
            return f.event.remove(this, "._change"), z.test(this.nodeName)
        }
    }), f.support.focusinBubbles || f.each({
        focus: "focusin",
        blur: "focusout"
    }, function (a, b) {
        var d = 0,
            e = function (a) {
                f.event.simulate(b, a.target, f.event.fix(a), !0)
            };
        f.event.special[b] = {
            setup: function () {
                d++ === 0 && c.addEventListener(a, e, !0)
            },
            teardown: function () {
                --d === 0 && c.removeEventListener(a, e, !0)
            }
        }
    }), f.fn.extend({
        on: function (a, c, d, e, g) {
            var h, i;
            if (typeof a == "object") {
                typeof c != "string" && (d = d || c, c = b);
                for (i in a) this.on(i, c, d, a[i], g);
                return this
            }
            d == null && e == null ? (e = c, d = c = b) : e == null && (typeof c == "string" ? (e = d, d = b) : (e = d, d = c, c = b));
            if (e === !1) e = J;
            else if (!e) return this;
            return g === 1 && (h = e, e = function (a) {
                return f().off(a), h.apply(this, arguments)
            }, e.guid = h.guid || (h.guid = f.guid++)), this.each(function () {
                f.event.add(this, a, e, d, c)
            })
        },
        one: function (a, b, c, d) {
            return this.on(a, b, c, d, 1)
        },
        off: function (a, c, d) {
            if (a && a.preventDefault && a.handleObj) {
                var e = a.handleObj;
                return f(a.delegateTarget).off(e.namespace ? e.origType + "." + e.namespace : e.origType, e.selector, e.handler), this
            }
            if (typeof a == "object") {
                for (var g in a) this.off(g, c, a[g]);
                return this
            }
            if (c === !1 || typeof c == "function") d = c, c = b;
            return d === !1 && (d = J), this.each(function () {
                f.event.remove(this, a, d, c)
            })
        },
        bind: function (a, b, c) {
            return this.on(a, null, b, c)
        },
        unbind: function (a, b) {
            return this.off(a, null, b)
        },
        live: function (a, b, c) {
            return f(this.context).on(a, this.selector, b, c), this
        },
        die: function (a, b) {
            return f(this.context).off(a, this.selector || "**", b), this
        },
        delegate: function (a, b, c, d) {
            return this.on(b, a, c, d)
        },
        undelegate: function (a, b, c) {
            return arguments.length == 1 ? this.off(a, "**") : this.off(b, a, c)
        },
        trigger: function (a, b) {
            return this.each(function () {
                f.event.trigger(a, b, this)
            })
        },
        triggerHandler: function (a, b) {
            if (this[0]) return f.event.trigger(a, b, this[0], !0)
        },
        toggle: function (a) {
            var b = arguments,
                c = a.guid || f.guid++,
                d = 0,
                e = function (c) {
                    var e = (f._data(this, "lastToggle" + a.guid) || 0) % d;
                    return f._data(this, "lastToggle" + a.guid, e + 1), c.preventDefault(), b[e].apply(this, arguments) || !1
                };
            e.guid = c;
            while (d < b.length) b[d++].guid = c;
            return this.click(e)
        },
        hover: function (a, b) {
            return this.mouseenter(a).mouseleave(b || a)
        }
    }), f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
        f.fn[b] = function (a, c) {
            return c == null && (c = a, a = null), arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
        }, f.attrFn && (f.attrFn[b] = !0), C.test(b) && (f.event.fixHooks[b] = f.event.keyHooks), D.test(b) && (f.event.fixHooks[b] = f.event.mouseHooks)
    }), function () {
        function w(a, b, c, e, f, g) {
            for (var h = 0, i = e.length; h < i; h++) {
                var j = e[h];
                if (j) {
                    var k = !1;
                    j = j[a];
                    while (j) {
                        if (j[d] === c) {
                            k = e[j.sizset];
                            break
                        }
                        j.nodeType === 1 && !g && (j[d] = c, j.sizset = h);
                        if (j.nodeName.toLowerCase() === b) {
                            k = j;
                            break
                        }
                        j = j[a]
                    }
                    e[h] = k
                }
            }
        }
        function x(a, b, c, e, f, g) {
            for (var h = 0, i = e.length; h < i; h++) {
                var j = e[h];
                if (j) {
                    var k = !1;
                    j = j[a];
                    while (j) {
                        if (j[d] === c) {
                            k = e[j.sizset];
                            break
                        }
                        if (j.nodeType === 1) {
                            g || (j[d] = c, j.sizset = h);
                            if (typeof b != "string") {
                                if (j === b) {
                                    k = !0;
                                    break
                                }
                            } else if (m.filter(b, [j]).length > 0) {
                                k = j;
                                break
                            }
                        }
                        j = j[a]
                    }
                    e[h] = k
                }
            }
        }
        var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
            d = "sizcache" + (Math.random() + "").replace(".", ""),
            e = 0,
            g = Object.prototype.toString,
            h = !1,
            i = !0,
            j = /\\/g,
            k = /\r\n/g,
            l = /\W/;
        [0, 0].sort(function () {
            return i = !1, 0
        });
        var m = function (b, d, e, f) {
                e = e || [], d = d || c;
                var h = d;
                if (d.nodeType !== 1 && d.nodeType !== 9) return [];
                if (!b || typeof b != "string") return e;
                var i, j, k, l, n, q, r, t, u = !0,
                    v = m.isXML(d),
                    w = [],
                    x = b;
                do {
                    a.exec(""), i = a.exec(x);
                    if (i) {
                        x = i[3], w.push(i[1]);
                        if (i[2]) {
                            l = i[3];
                            break
                        }
                    }
                } while (i);
                if (w.length > 1 && p.exec(b)) if (w.length === 2 && o.relative[w[0]]) j = y(w[0] + w[1], d, f);
                else {
                    j = o.relative[w[0]] ? [d] : m(w.shift(), d);
                    while (w.length) b = w.shift(), o.relative[b] && (b += w.shift()), j = y(b, j, f)
                } else {
                    !f && w.length > 1 && d.nodeType === 9 && !v && o.match.ID.test(w[0]) && !o.match.ID.test(w[w.length - 1]) && (n = m.find(w.shift(), d, v), d = n.expr ? m.filter(n.expr, n.set)[0] : n.set[0]);
                    if (d) {
                        n = f ? {
                            expr: w.pop(),
                            set: s(f)
                        } : m.find(w.pop(), w.length !== 1 || w[0] !== "~" && w[0] !== "+" || !d.parentNode ? d : d.parentNode, v), j = n.expr ? m.filter(n.expr, n.set) : n.set, w.length > 0 ? k = s(j) : u = !1;
                        while (w.length) q = w.pop(), r = q, o.relative[q] ? r = w.pop() : q = "", r == null && (r = d), o.relative[q](k, r, v)
                    } else k = w = []
                }
                k || (k = j), k || m.error(q || b);
                if (g.call(k) === "[object Array]") if (!u) e.push.apply(e, k);
                else if (d && d.nodeType === 1) for (t = 0; k[t] != null; t++) k[t] && (k[t] === !0 || k[t].nodeType === 1 && m.contains(d, k[t])) && e.push(j[t]);
                else for (t = 0; k[t] != null; t++) k[t] && k[t].nodeType === 1 && e.push(j[t]);
                else s(k, e);
                return l && (m(l, h, e, f), m.uniqueSort(e)), e
            };
        m.uniqueSort = function (a) {
            if (u) {
                h = i, a.sort(u);
                if (h) for (var b = 1; b < a.length; b++) a[b] === a[b - 1] && a.splice(b--, 1)
            }
            return a
        }, m.matches = function (a, b) {
            return m(a, null, null, b)
        }, m.matchesSelector = function (a, b) {
            return m(b, null, null, [a]).length > 0
        }, m.find = function (a, b, c) {
            var d, e, f, g, h, i;
            if (!a) return [];
            for (e = 0, f = o.order.length; e < f; e++) {
                h = o.order[e];
                if (g = o.leftMatch[h].exec(a)) {
                    i = g[1], g.splice(1, 1);
                    if (i.substr(i.length - 1) !== "\\") {
                        g[1] = (g[1] || "").replace(j, ""), d = o.find[h](g, b, c);
                        if (d != null) {
                            a = a.replace(o.match[h], "");
                            break
                        }
                    }
                }
            }
            return d || (d = typeof b.getElementsByTagName != "undefined" ? b.getElementsByTagName("*") : []), {
                set: d,
                expr: a
            }
        }, m.filter = function (a, c, d, e) {
            var f, g, h, i, j, k, l, n, p, q = a,
                r = [],
                s = c,
                t = c && c[0] && m.isXML(c[0]);
            while (a && c.length) {
                for (h in o.filter) if ((f = o.leftMatch[h].exec(a)) != null && f[2]) {
                    k = o.filter[h], l = f[1], g = !1, f.splice(1, 1);
                    if (l.substr(l.length - 1) === "\\") continue;
                    s === r && (r = []);
                    if (o.preFilter[h]) {
                        f = o.preFilter[h](f, s, d, r, e, t);
                        if (!f) g = i = !0;
                        else if (f === !0) continue
                    }
                    if (f) for (n = 0;
                    (j = s[n]) != null; n++) j && (i = k(j, f, n, s), p = e ^ i, d && i != null ? p ? g = !0 : s[n] = !1 : p && (r.push(j), g = !0));
                    if (i !== b) {
                        d || (s = r), a = a.replace(o.match[h], "");
                        if (!g) return [];
                        break
                    }
                }
                if (a === q) {
                    if (g != null) break;
                    m.error(a)
                }
                q = a
            }
            return s
        }, m.error = function (a) {
            throw new Error("Syntax error, unrecognized expression: " + a)
        };
        var n = m.getText = function (a) {
                var b, c, d = a.nodeType,
                    e = "";
                if (d) {
                    if (d === 1 || d === 9 || d === 11) {
                        if (typeof a.textContent == "string") return a.textContent;
                        if (typeof a.innerText == "string") return a.innerText.replace(k, "");
                        for (a = a.firstChild; a; a = a.nextSibling) e += n(a)
                    } else if (d === 3 || d === 4) return a.nodeValue
                } else for (b = 0; c = a[b]; b++) c.nodeType !== 8 && (e += n(c));
                return e
            },
            o = m.selectors = {
                order: ["ID", "NAME", "TAG"],
                match: {
                    ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
                    CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
                    NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
                    ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
                    TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
                    CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
                    POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
                    PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
                },
                leftMatch: {},
                attrMap: {
                    "class": "className",
                    "for": "htmlFor"
                },
                attrHandle: {
                    href: function (a) {
                        return a.getAttribute("href")
                    },
                    type: function (a) {
                        return a.getAttribute("type")
                    }
                },
                relative: {
                    "+": function (a, b) {
                        var c = typeof b == "string",
                            d = c && !l.test(b),
                            e = c && !d;
                        d && (b = b.toLowerCase());
                        for (var f = 0, g = a.length, h; f < g; f++) if (h = a[f]) {
                            while ((h = h.previousSibling) && h.nodeType !== 1);
                            a[f] = e || h && h.nodeName.toLowerCase() === b ? h || !1 : h === b
                        }
                        e && m.filter(b, a, !0)
                    },
                    ">": function (a, b) {
                        var c, d = typeof b == "string",
                            e = 0,
                            f = a.length;
                        if (d && !l.test(b)) {
                            b = b.toLowerCase();
                            for (; e < f; e++) {
                                c = a[e];
                                if (c) {
                                    var g = c.parentNode;
                                    a[e] = g.nodeName.toLowerCase() === b ? g : !1
                                }
                            }
                        } else {
                            for (; e < f; e++) c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b);
                            d && m.filter(b, a, !0)
                        }
                    },
                    "": function (a, b, c) {
                        var d, f = e++,
                            g = x;
                        typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("parentNode", b, f, a, d, c)
                    },
                    "~": function (a, b, c) {
                        var d, f = e++,
                            g = x;
                        typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("previousSibling", b, f, a, d, c)
                    }
                },
                find: {
                    ID: function (a, b, c) {
                        if (typeof b.getElementById != "undefined" && !c) {
                            var d = b.getElementById(a[1]);
                            return d && d.parentNode ? [d] : []
                        }
                    },
                    NAME: function (a, b) {
                        if (typeof b.getElementsByName != "undefined") {
                            var c = [],
                                d = b.getElementsByName(a[1]);
                            for (var e = 0, f = d.length; e < f; e++) d[e].getAttribute("name") === a[1] && c.push(d[e]);
                            return c.length === 0 ? null : c
                        }
                    },
                    TAG: function (a, b) {
                        if (typeof b.getElementsByTagName != "undefined") return b.getElementsByTagName(a[1])
                    }
                },
                preFilter: {
                    CLASS: function (a, b, c, d, e, f) {
                        a = " " + a[1].replace(j, "") + " ";
                        if (f) return a;
                        for (var g = 0, h;
                        (h = b[g]) != null; g++) h && (e ^ (h.className && (" " + h.className + " ").replace(/[\t\n\r]/g, " ").indexOf(a) >= 0) ? c || d.push(h) : c && (b[g] = !1));
                        return !1
                    },
                    ID: function (a) {
                        return a[1].replace(j, "")
                    },
                    TAG: function (a, b) {
                        return a[1].replace(j, "").toLowerCase()
                    },
                    CHILD: function (a) {
                        if (a[1] === "nth") {
                            a[2] || m.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, "");
                            var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
                            a[2] = b[1] + (b[2] || 1) - 0, a[3] = b[3] - 0
                        } else a[2] && m.error(a[0]);
                        return a[0] = e++, a
                    },
                    ATTR: function (a, b, c, d, e, f) {
                        var g = a[1] = a[1].replace(j, "");
                        return !f && o.attrMap[g] && (a[1] = o.attrMap[g]), a[4] = (a[4] || a[5] || "").replace(j, ""), a[2] === "~=" && (a[4] = " " + a[4] + " "), a
                    },
                    PSEUDO: function (b, c, d, e, f) {
                        if (b[1] === "not") {
                            if (!((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3]))) {
                                var g = m.filter(b[3], c, d, !0 ^ f);
                                return d || e.push.apply(e, g), !1
                            }
                            b[3] = m(b[3], null, null, c)
                        } else if (o.match.POS.test(b[0]) || o.match.CHILD.test(b[0])) return !0;
                        return b
                    },
                    POS: function (a) {
                        return a.unshift(!0), a
                    }
                },
                filters: {
                    enabled: function (a) {
                        return a.disabled === !1 && a.type !== "hidden"
                    },
                    disabled: function (a) {
                        return a.disabled === !0
                    },
                    checked: function (a) {
                        return a.checked === !0
                    },
                    selected: function (a) {
                        return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
                    },
                    parent: function (a) {
                        return !!a.firstChild
                    },
                    empty: function (a) {
                        return !a.firstChild
                    },
                    has: function (a, b, c) {
                        return !!m(c[3], a).length
                    },
                    header: function (a) {
                        return /h\d/i.test(a.nodeName)
                    },
                    text: function (a) {
                        var b = a.getAttribute("type"),
                            c = a.type;
                        return a.nodeName.toLowerCase() === "input" && "text" === c && (b === c || b === null)
                    },
                    radio: function (a) {
                        return a.nodeName.toLowerCase() === "input" && "radio" === a.type
                    },
                    checkbox: function (a) {
                        return a.nodeName.toLowerCase() === "input" && "checkbox" === a.type
                    },
                    file: function (a) {
                        return a.nodeName.toLowerCase() === "input" && "file" === a.type
                    },
                    password: function (a) {
                        return a.nodeName.toLowerCase() === "input" && "password" === a.type
                    },
                    submit: function (a) {
                        var b = a.nodeName.toLowerCase();
                        return (b === "input" || b === "button") && "submit" === a.type
                    },
                    image: function (a) {
                        return a.nodeName.toLowerCase() === "input" && "image" === a.type
                    },
                    reset: function (a) {
                        var b = a.nodeName.toLowerCase();
                        return (b === "input" || b === "button") && "reset" === a.type
                    },
                    button: function (a) {
                        var b = a.nodeName.toLowerCase();
                        return b === "input" && "button" === a.type || b === "button"
                    },
                    input: function (a) {
                        return /input|select|textarea|button/i.test(a.nodeName)
                    },
                    focus: function (a) {
                        return a === a.ownerDocument.activeElement
                    }
                },
                setFilters: {
                    first: function (a, b) {
                        return b === 0
                    },
                    last: function (a, b, c, d) {
                        return b === d.length - 1
                    },
                    even: function (a, b) {
                        return b % 2 === 0
                    },
                    odd: function (a, b) {
                        return b % 2 === 1
                    },
                    lt: function (a, b, c) {
                        return b < c[3] - 0
                    },
                    gt: function (a, b, c) {
                        return b > c[3] - 0
                    },
                    nth: function (a, b, c) {
                        return c[3] - 0 === b
                    },
                    eq: function (a, b, c) {
                        return c[3] - 0 === b
                    }
                },
                filter: {
                    PSEUDO: function (a, b, c, d) {
                        var e = b[1],
                            f = o.filters[e];
                        if (f) return f(a, c, b, d);
                        if (e === "contains") return (a.textContent || a.innerText || n([a]) || "").indexOf(b[3]) >= 0;
                        if (e === "not") {
                            var g = b[3];
                            for (var h = 0, i = g.length; h < i; h++) if (g[h] === a) return !1;
                            return !0
                        }
                        m.error(e)
                    },
                    CHILD: function (a, b) {
                        var c, e, f, g, h, i, j, k = b[1],
                            l = a;
                        switch (k) {
                        case "only":
                        case "first":
                            while (l = l.previousSibling) if (l.nodeType === 1) return !1;
                            if (k === "first") return !0;
                            l = a;
                        case "last":
                            while (l = l.nextSibling) if (l.nodeType === 1) return !1;
                            return !0;
                        case "nth":
                            c = b[2], e = b[3];
                            if (c === 1 && e === 0) return !0;
                            f = b[0], g = a.parentNode;
                            if (g && (g[d] !== f || !a.nodeIndex)) {
                                i = 0;
                                for (l = g.firstChild; l; l = l.nextSibling) l.nodeType === 1 && (l.nodeIndex = ++i);
                                g[d] = f
                            }
                            return j = a.nodeIndex - e, c === 0 ? j === 0 : j % c === 0 && j / c >= 0
                        }
                    },
                    ID: function (a, b) {
                        return a.nodeType === 1 && a.getAttribute("id") === b
                    },
                    TAG: function (a, b) {
                        return b === "*" && a.nodeType === 1 || !! a.nodeName && a.nodeName.toLowerCase() === b
                    },
                    CLASS: function (a, b) {
                        return (" " + (a.className || a.getAttribute("class")) + " ").indexOf(b) > -1
                    },
                    ATTR: function (a, b) {
                        var c = b[1],
                            d = m.attr ? m.attr(a, c) : o.attrHandle[c] ? o.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c),
                            e = d + "",
                            f = b[2],
                            g = b[4];
                        return d == null ? f === "!=" : !f && m.attr ? d != null : f === "=" ? e === g : f === "*=" ? e.indexOf(g) >= 0 : f === "~=" ? (" " + e + " ").indexOf(g) >= 0 : g ? f === "!=" ? e !== g : f === "^=" ? e.indexOf(g) === 0 : f === "$=" ? e.substr(e.length - g.length) === g : f === "|=" ? e === g || e.substr(0, g.length + 1) === g + "-" : !1 : e && d !== !1
                    },
                    POS: function (a, b, c, d) {
                        var e = b[2],
                            f = o.setFilters[e];
                        if (f) return f(a, c, b, d)
                    }
                }
            },
            p = o.match.POS,
            q = function (a, b) {
                return "\\" + (b - 0 + 1)
            };
        for (var r in o.match) o.match[r] = new RegExp(o.match[r].source + /(?![^\[]*\])(?![^\(]*\))/.source), o.leftMatch[r] = new RegExp(/(^(?:.|\r|\n)*?)/.source + o.match[r].source.replace(/\\(\d+)/g, q));
        o.match.globalPOS = p;
        var s = function (a, b) {
                return a = Array.prototype.slice.call(a, 0), b ? (b.push.apply(b, a), b) : a
            };
        try {
            Array.prototype.slice.call(c.documentElement.childNodes, 0)[0].nodeType
        } catch (t) {
            s = function (a, b) {
                var c = 0,
                    d = b || [];
                if (g.call(a) === "[object Array]") Array.prototype.push.apply(d, a);
                else if (typeof a.length == "number") for (var e = a.length; c < e; c++) d.push(a[c]);
                else for (; a[c]; c++) d.push(a[c]);
                return d
            }
        }
        var u, v;
        c.documentElement.compareDocumentPosition ? u = function (a, b) {
            return a === b ? (h = !0, 0) : !a.compareDocumentPosition || !b.compareDocumentPosition ? a.compareDocumentPosition ? -1 : 1 : a.compareDocumentPosition(b) & 4 ? -1 : 1
        } : (u = function (a, b) {
            if (a === b) return h = !0, 0;
            if (a.sourceIndex && b.sourceIndex) return a.sourceIndex - b.sourceIndex;
            var c, d, e = [],
                f = [],
                g = a.parentNode,
                i = b.parentNode,
                j = g;
            if (g === i) return v(a, b);
            if (!g) return -1;
            if (!i) return 1;
            while (j) e.unshift(j), j = j.parentNode;
            j = i;
            while (j) f.unshift(j), j = j.parentNode;
            c = e.length, d = f.length;
            for (var k = 0; k < c && k < d; k++) if (e[k] !== f[k]) return v(e[k], f[k]);
            return k === c ? v(a, f[k], -1) : v(e[k], b, 1)
        }, v = function (a, b, c) {
            if (a === b) return c;
            var d = a.nextSibling;
            while (d) {
                if (d === b) return -1;
                d = d.nextSibling
            }
            return 1
        }), function () {
            var a = c.createElement("div"),
                d = "script" + (new Date).getTime(),
                e = c.documentElement;
            a.innerHTML = "<a name='" + d + "'/>", e.insertBefore(a, e.firstChild), c.getElementById(d) && (o.find.ID = function (a, c, d) {
                if (typeof c.getElementById != "undefined" && !d) {
                    var e = c.getElementById(a[1]);
                    return e ? e.id === a[1] || typeof e.getAttributeNode != "undefined" && e.getAttributeNode("id").nodeValue === a[1] ? [e] : b : []
                }
            }, o.filter.ID = function (a, b) {
                var c = typeof a.getAttributeNode != "undefined" && a.getAttributeNode("id");
                return a.nodeType === 1 && c && c.nodeValue === b
            }), e.removeChild(a), e = a = null
        }(), function () {
            var a = c.createElement("div");
            a.appendChild(c.createComment("")), a.getElementsByTagName("*").length > 0 && (o.find.TAG = function (a, b) {
                var c = b.getElementsByTagName(a[1]);
                if (a[1] === "*") {
                    var d = [];
                    for (var e = 0; c[e]; e++) c[e].nodeType === 1 && d.push(c[e]);
                    c = d
                }
                return c
            }), a.innerHTML = "<a href='#'></a>", a.firstChild && typeof a.firstChild.getAttribute != "undefined" && a.firstChild.getAttribute("href") !== "#" && (o.attrHandle.href = function (a) {
                return a.getAttribute("href", 2)
            }), a = null
        }(), c.querySelectorAll &&
        function () {
            var a = m,
                b = c.createElement("div"),
                d = "__sizzle__";
            b.innerHTML = "<p class='TEST'></p>";
            if (b.querySelectorAll && b.querySelectorAll(".TEST").length === 0) return;
            m = function (b, e, f, g) {
                e = e || c;
                if (!g && !m.isXML(e)) {
                    var h = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
                    if (h && (e.nodeType === 1 || e.nodeType === 9)) {
                        if (h[1]) return s(e.getElementsByTagName(b), f);
                        if (h[2] && o.find.CLASS && e.getElementsByClassName) return s(e.getElementsByClassName(h[2]), f)
                    }
                    if (e.nodeType === 9) {
                        if (b === "body" && e.body) return s([e.body], f);
                        if (h && h[3]) {
                            var i = e.getElementById(h[3]);
                            if (!i || !i.parentNode) return s([], f);
                            if (i.id === h[3]) return s([i], f)
                        }
                        try {
                            return s(e.querySelectorAll(b), f)
                        } catch (j) {}
                    } else if (e.nodeType === 1 && e.nodeName.toLowerCase() !== "object") {
                        var k = e,
                            l = e.getAttribute("id"),
                            n = l || d,
                            p = e.parentNode,
                            q = /^\s*[+~]/.test(b);
                        l ? n = n.replace(/'/g, "\\$&") : e.setAttribute("id", n), q && p && (e = e.parentNode);
                        try {
                            if (!q || p) return s(e.querySelectorAll("[id='" + n + "'] " + b), f)
                        } catch (r) {} finally {
                            l || k.removeAttribute("id")
                        }
                    }
                }
                return a(b, e, f, g)
            };
            for (var e in a) m[e] = a[e];
            b = null
        }(), function () {
            var a = c.documentElement,
                b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector;
            if (b) {
                var d = !b.call(c.createElement("div"), "div"),
                    e = !1;
                try {
                    b.call(c.documentElement, "[test!='']:sizzle")
                } catch (f) {
                    e = !0
                }
                m.matchesSelector = function (a, c) {
                    c = c.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
                    if (!m.isXML(a)) try {
                        if (e || !o.match.PSEUDO.test(c) && !/!=/.test(c)) {
                            var f = b.call(a, c);
                            if (f || !d || a.document && a.document.nodeType !== 11) return f
                        }
                    } catch (g) {}
                    return m(c, null, null, [a]).length > 0
                }
            }
        }(), function () {
            var a = c.createElement("div");
            a.innerHTML = "<div class='test e'></div><div class='test'></div>";
            if (!a.getElementsByClassName || a.getElementsByClassName("e").length === 0) return;
            a.lastChild.className = "e";
            if (a.getElementsByClassName("e").length === 1) return;
            o.order.splice(1, 0, "CLASS"), o.find.CLASS = function (a, b, c) {
                if (typeof b.getElementsByClassName != "undefined" && !c) return b.getElementsByClassName(a[1])
            }, a = null
        }(), c.documentElement.contains ? m.contains = function (a, b) {
            return a !== b && (a.contains ? a.contains(b) : !0)
        } : c.documentElement.compareDocumentPosition ? m.contains = function (a, b) {
            return !!(a.compareDocumentPosition(b) & 16)
        } : m.contains = function () {
            return !1
        }, m.isXML = function (a) {
            var b = (a ? a.ownerDocument || a : 0).documentElement;
            return b ? b.nodeName !== "HTML" : !1
        };
        var y = function (a, b, c) {
                var d, e = [],
                    f = "",
                    g = b.nodeType ? [b] : b;
                while (d = o.match.PSEUDO.exec(a)) f += d[0], a = a.replace(o.match.PSEUDO, "");
                a = o.relative[a] ? a + "*" : a;
                for (var h = 0, i = g.length; h < i; h++) m(a, g[h], e, c);
                return m.filter(f, e)
            };
        m.attr = f.attr, m.selectors.attrMap = {}, f.find = m, f.expr = m.selectors, f.expr[":"] = f.expr.filters, f.unique = m.uniqueSort, f.text = m.getText, f.isXMLDoc = m.isXML, f.contains = m.contains
    }();
    var L = /Until$/,
        M = /^(?:parents|prevUntil|prevAll)/,
        N = /,/,
        O = /^.[^:#\[\.,]*$/,
        P = Array.prototype.slice,
        Q = f.expr.match.globalPOS,
        R = {
            children: !0,
            contents: !0,
            next: !0,
            prev: !0
        };
    f.fn.extend({
        find: function (a) {
            var b = this,
                c, d;
            if (typeof a != "string") return f(a).filter(function () {
                for (c = 0, d = b.length; c < d; c++) if (f.contains(b[c], this)) return !0
            });
            var e = this.pushStack("", "find", a),
                g, h, i;
            for (c = 0, d = this.length; c < d; c++) {
                g = e.length, f.find(a, this[c], e);
                if (c > 0) for (h = g; h < e.length; h++) for (i = 0; i < g; i++) if (e[i] === e[h]) {
                    e.splice(h--, 1);
                    break
                }
            }
            return e
        },
        has: function (a) {
            var b = f(a);
            return this.filter(function () {
                for (var a = 0, c = b.length; a < c; a++) if (f.contains(this, b[a])) return !0
            })
        },
        not: function (a) {
            return this.pushStack(T(this, a, !1), "not", a)
        },
        filter: function (a) {
            return this.pushStack(T(this, a, !0), "filter", a)
        },
        is: function (a) {
            return !!a && (typeof a == "string" ? Q.test(a) ? f(a, this.context).index(this[0]) >= 0 : f.filter(a, this).length > 0 : this.filter(a).length > 0)
        },
        closest: function (a, b) {
            var c = [],
                d, e, g = this[0];
            if (f.isArray(a)) {
                var h = 1;
                while (g && g.ownerDocument && g !== b) {
                    for (d = 0; d < a.length; d++) f(g).is(a[d]) && c.push({
                        selector: a[d],
                        elem: g,
                        level: h
                    });
                    g = g.parentNode, h++
                }
                return c
            }
            var i = Q.test(a) || typeof a != "string" ? f(a, b || this.context) : 0;
            for (d = 0, e = this.length; d < e; d++) {
                g = this[d];
                while (g) {
                    if (i ? i.index(g) > -1 : f.find.matchesSelector(g, a)) {
                        c.push(g);
                        break
                    }
                    g = g.parentNode;
                    if (!g || !g.ownerDocument || g === b || g.nodeType === 11) break
                }
            }
            return c = c.length > 1 ? f.unique(c) : c, this.pushStack(c, "closest", a)
        },
        index: function (a) {
            return a ? typeof a == "string" ? f.inArray(this[0], f(a)) : f.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1
        },
        add: function (a, b) {
            var c = typeof a == "string" ? f(a, b) : f.makeArray(a && a.nodeType ? [a] : a),
                d = f.merge(this.get(), c);
            return this.pushStack(S(c[0]) || S(d[0]) ? d : f.unique(d))
        },
        andSelf: function () {
            return this.add(this.prevObject)
        }
    }), f.each({
        parent: function (a) {
            var b = a.parentNode;
            return b && b.nodeType !== 11 ? b : null
        },
        parents: function (a) {
            return f.dir(a, "parentNode")
        },
        parentsUntil: function (a, b, c) {
            return f.dir(a, "parentNode", c)
        },
        next: function (a) {
            return f.nth(a, 2, "nextSibling")
        },
        prev: function (a) {
            return f.nth(a, 2, "previousSibling")
        },
        nextAll: function (a) {
            return f.dir(a, "nextSibling")
        },
        prevAll: function (a) {
            return f.dir(a, "previousSibling")
        },
        nextUntil: function (a, b, c) {
            return f.dir(a, "nextSibling", c)
        },
        prevUntil: function (a, b, c) {
            return f.dir(a, "previousSibling", c)
        },
        siblings: function (a) {
            return f.sibling((a.parentNode || {}).firstChild, a)
        },
        children: function (a) {
            return f.sibling(a.firstChild)
        },
        contents: function (a) {
            return f.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : f.makeArray(a.childNodes)
        }
    }, function (a, b) {
        f.fn[a] = function (c, d) {
            var e = f.map(this, b, c);
            return L.test(a) || (d = c), d && typeof d == "string" && (e = f.filter(d, e)), e = this.length > 1 && !R[a] ? f.unique(e) : e, (this.length > 1 || N.test(d)) && M.test(a) && (e = e.reverse()), this.pushStack(e, a, P.call(arguments).join(","))
        }
    }), f.extend({
        filter: function (a, b, c) {
            return c && (a = ":not(" + a + ")"), b.length === 1 ? f.find.matchesSelector(b[0], a) ? [b[0]] : [] : f.find.matches(a, b)
        },
        dir: function (a, c, d) {
            var e = [],
                g = a[c];
            while (g && g.nodeType !== 9 && (d === b || g.nodeType !== 1 || !f(g).is(d))) g.nodeType === 1 && e.push(g), g = g[c];
            return e
        },
        nth: function (a, b, c, d) {
            b = b || 1;
            var e = 0;
            for (; a; a = a[c]) if (a.nodeType === 1 && ++e === b) break;
            return a
        },
        sibling: function (a, b) {
            var c = [];
            for (; a; a = a.nextSibling) a.nodeType === 1 && a !== b && c.push(a);
            return c
        }
    });
    var V = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
        W = / jQuery\d+="(?:\d+|null)"/g,
        X = /^\s+/,
        Y = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
        Z = /<([\w:]+)/,
        $ = /<tbody/i,
        _ = /<|&#?\w+;/,
        ab = /<(?:script|style)/i,
        bb = /<(?:script|object|embed|option|style)/i,
        cb = new RegExp("<(?:" + V + ")[\\s/>]", "i"),
        db = /checked\s*(?:[^=]|=\s*.checked.)/i,
        eb = /\/(java|ecma)script/i,
        fb = /^\s*<!(?:\[CDATA\[|\-\-)/,
        gb = {
            option: [1, "<select multiple='multiple'>", "</select>"],
            legend: [1, "<fieldset>", "</fieldset>"],
            thead: [1, "<table>", "</table>"],
            tr: [2, "<table><tbody>", "</tbody></table>"],
            td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
            col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
            area: [1, "<map>", "</map>"],
            _default: [0, "", ""]
        },
        hb = U(c);
    gb.optgroup = gb.option, gb.tbody = gb.tfoot = gb.colgroup = gb.caption = gb.thead, gb.th = gb.td, f.support.htmlSerialize || (gb._default = [1, "div<div>", "</div>"]), f.fn.extend({
        text: function (a) {
            return f.access(this, function (a) {
                return a === b ? f.text(this) : this.empty().append((this[0] && this[0].ownerDocument || c).createTextNode(a))
            }, null, a, arguments.length)
        },
        wrapAll: function (a) {
            if (f.isFunction(a)) return this.each(function (b) {
                f(this).wrapAll(a.call(this, b))
            });
            if (this[0]) {
                var b = f(a, this[0].ownerDocument).eq(0).clone(!0);
                this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
                    var a = this;
                    while (a.firstChild && a.firstChild.nodeType === 1) a = a.firstChild;
                    return a
                }).append(this)
            }
            return this
        },
        wrapInner: function (a) {
            return f.isFunction(a) ? this.each(function (b) {
                f(this).wrapInner(a.call(this, b))
            }) : this.each(function () {
                var b = f(this),
                    c = b.contents();
                c.length ? c.wrapAll(a) : b.append(a)
            })
        },
        wrap: function (a) {
            var b = f.isFunction(a);
            return this.each(function (c) {
                f(this).wrapAll(b ? a.call(this, c) : a)
            })
        },
        unwrap: function () {
            return this.parent().each(function () {
                f.nodeName(this, "body") || f(this).replaceWith(this.childNodes)
            }).end()
        },
        append: function () {
            return this.domManip(arguments, !0, function (a) {
                this.nodeType === 1 && this.appendChild(a)
            })
        },
        prepend: function () {
            return this.domManip(arguments, !0, function (a) {
                this.nodeType === 1 && this.insertBefore(a, this.firstChild)
            })
        },
        before: function () {
            if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) {
                this.parentNode.insertBefore(a, this)
            });
            if (arguments.length) {
                var a = f.clean(arguments);
                return a.push.apply(a, this.toArray()), this.pushStack(a, "before", arguments)
            }
        },
        after: function () {
            if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) {
                this.parentNode.insertBefore(a, this.nextSibling)
            });
            if (arguments.length) {
                var a = this.pushStack(this, "after", arguments);
                return a.push.apply(a, f.clean(arguments)), a
            }
        },
        remove: function (a, b) {
            for (var c = 0, d;
            (d = this[c]) != null; c++) if (!a || f.filter(a, [d]).length)!b && d.nodeType === 1 && (f.cleanData(d.getElementsByTagName("*")), f.cleanData([d])), d.parentNode && d.parentNode.removeChild(d);
            return this
        },
        empty: function () {
            for (var a = 0, b;
            (b = this[a]) != null; a++) {
                b.nodeType === 1 && f.cleanData(b.getElementsByTagName("*"));
                while (b.firstChild) b.removeChild(b.firstChild)
            }
            return this
        },
        clone: function (a, b) {
            return a = a == null ? !1 : a, b = b == null ? a : b, this.map(function () {
                return f.clone(this, a, b)
            })
        },
        html: function (a) {
            return f.access(this, function (a) {
                var c = this[0] || {},
                    d = 0,
                    e = this.length;
                if (a === b) return c.nodeType === 1 ? c.innerHTML.replace(W, "") : null;
                if (typeof a == "string" && !ab.test(a) && (f.support.leadingWhitespace || !X.test(a)) && !gb[(Z.exec(a) || ["", ""])[1].toLowerCase()]) {
                    a = a.replace(Y, "<$1></$2>");
                    try {
                        for (; d < e; d++) c = this[d] || {}, c.nodeType === 1 && (f.cleanData(c.getElementsByTagName("*")), c.innerHTML = a);
                        c = 0
                    } catch (g) {}
                }
                c && this.empty().append(a)
            }, null, a, arguments.length)
        },
        replaceWith: function (a) {
            return this[0] && this[0].parentNode ? f.isFunction(a) ? this.each(function (b) {
                var c = f(this),
                    d = c.html();
                c.replaceWith(a.call(this, b, d))
            }) : (typeof a != "string" && (a = f(a).detach()), this.each(function () {
                var b = this.nextSibling,
                    c = this.parentNode;
                f(this).remove(), b ? f(b).before(a) : f(c).append(a)
            })) : this.length ? this.pushStack(f(f.isFunction(a) ? a() : a), "replaceWith", a) : this
        },
        detach: function (a) {
            return this.remove(a, !0)
        },
        domManip: function (a, c, d) {
            var e, g, h, i, j = a[0],
                k = [];
            if (!f.support.checkClone && arguments.length === 3 && typeof j == "string" && db.test(j)) return this.each(function () {
                f(this).domManip(a, c, d, !0)
            });
            if (f.isFunction(j)) return this.each(function (e) {
                var g = f(this);
                a[0] = j.call(this, e, c ? g.html() : b), g.domManip(a, c, d)
            });
            if (this[0]) {
                i = j && j.parentNode, f.support.parentNode && i && i.nodeType === 11 && i.childNodes.length === this.length ? e = {
                    fragment: i
                } : e = f.buildFragment(a, this, k), h = e.fragment, h.childNodes.length === 1 ? g = h = h.firstChild : g = h.firstChild;
                if (g) {
                    c = c && f.nodeName(g, "tr");
                    for (var l = 0, m = this.length, n = m - 1; l < m; l++) d.call(c ? ib(this[l], g) : this[l], e.cacheable || m > 1 && l < n ? f.clone(h, !0, !0) : h)
                }
                k.length && f.each(k, function (a, b) {
                    b.src ? f.ajax({
                        type: "GET",
                        global: !1,
                        url: b.src,
                        async: !1,
                        dataType: "script"
                    }) : f.globalEval((b.text || b.textContent || b.innerHTML || "").replace(fb, "/*$0*/")), b.parentNode && b.parentNode.removeChild(b)
                })
            }
            return this
        }
    }), f.buildFragment = function (a, b, d) {
        var e, g, h, i, j = a[0];
        return b && b[0] && (i = b[0].ownerDocument || b[0]), i.createDocumentFragment || (i = c), a.length === 1 && typeof j == "string" && j.length < 512 && i === c && j.charAt(0) === "<" && !bb.test(j) && (f.support.checkClone || !db.test(j)) && (f.support.html5Clone || !cb.test(j)) && (g = !0, h = f.fragments[j], h && h !== 1 && (e = h)), e || (e = i.createDocumentFragment(), f.clean(a, i, e, d)), g && (f.fragments[j] = h ? e : 1), {
            fragment: e,
            cacheable: g
        }
    }, f.fragments = {}, f.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    }, function (a, b) {
        f.fn[a] = function (c) {
            var d = [],
                e = f(c),
                g = this.length === 1 && this[0].parentNode;
            if (g && g.nodeType === 11 && g.childNodes.length === 1 && e.length === 1) return e[b](this[0]), this;
            for (var h = 0, i = e.length; h < i; h++) {
                var j = (h > 0 ? this.clone(!0) : this).get();
                f(e[h])[b](j), d = d.concat(j)
            }
            return this.pushStack(d, a, e.selector)
        }
    }), f.extend({
        clone: function (a, b, c) {
            var d, e, g, h = f.support.html5Clone || f.isXMLDoc(a) || !cb.test("<" + a.nodeName + ">") ? a.cloneNode(!0) : ob(a);
            if ((!f.support.noCloneEvent || !f.support.noCloneChecked) && (a.nodeType === 1 || a.nodeType === 11) && !f.isXMLDoc(a)) {
                kb(a, h), d = lb(a), e = lb(h);
                for (g = 0; d[g]; ++g) e[g] && kb(d[g], e[g])
            }
            if (b) {
                jb(a, h);
                if (c) {
                    d = lb(a), e = lb(h);
                    for (g = 0; d[g]; ++g) jb(d[g], e[g])
                }
            }
            return d = e = null, h
        },
        clean: function (a, b, d, e) {
            var g, h, i, j = [];
            b = b || c, typeof b.createElement == "undefined" && (b = b.ownerDocument || b[0] && b[0].ownerDocument || c);
            for (var k = 0, l;
            (l = a[k]) != null; k++) {
                typeof l == "number" && (l += "");
                if (!l) continue;
                if (typeof l == "string") if (!_.test(l)) l = b.createTextNode(l);
                else {
                    l = l.replace(Y, "<$1></$2>");
                    var m = (Z.exec(l) || ["", ""])[1].toLowerCase(),
                        n = gb[m] || gb._default,
                        o = n[0],
                        p = b.createElement("div"),
                        q = hb.childNodes,
                        r;
                    b === c ? hb.appendChild(p) : U(b).appendChild(p), p.innerHTML = n[1] + l + n[2];
                    while (o--) p = p.lastChild;
                    if (!f.support.tbody) {
                        var s = $.test(l),
                            t = m === "table" && !s ? p.firstChild && p.firstChild.childNodes : n[1] === "<table>" && !s ? p.childNodes : [];
                        for (i = t.length - 1; i >= 0; --i) f.nodeName(t[i], "tbody") && !t[i].childNodes.length && t[i].parentNode.removeChild(t[i])
                    }!f.support.leadingWhitespace && X.test(l) && p.insertBefore(b.createTextNode(X.exec(l)[0]), p.firstChild), l = p.childNodes, p && (p.parentNode.removeChild(p), q.length > 0 && (r = q[q.length - 1], r && r.parentNode && r.parentNode.removeChild(r)))
                }
                var u;
                if (!f.support.appendChecked) if (l[0] && typeof (u = l.length) == "number") for (i = 0; i < u; i++) nb(l[i]);
                else nb(l);
                l.nodeType ? j.push(l) : j = f.merge(j, l)
            }
            if (d) {
                g = function (a) {
                    return !a.type || eb.test(a.type)
                };
                for (k = 0; j[k]; k++) {
                    h = j[k];
                    if (e && f.nodeName(h, "script") && (!h.type || eb.test(h.type))) e.push(h.parentNode ? h.parentNode.removeChild(h) : h);
                    else {
                        if (h.nodeType === 1) {
                            var v = f.grep(h.getElementsByTagName("script"), g);
                            j.splice.apply(j, [k + 1, 0].concat(v))
                        }
                        d.appendChild(h)
                    }
                }
            }
            return j
        },
        cleanData: function (a) {
            var b, c, d = f.cache,
                e = f.event.special,
                g = f.support.deleteExpando;
            for (var h = 0, i;
            (i = a[h]) != null; h++) {
                if (i.nodeName && f.noData[i.nodeName.toLowerCase()]) continue;
                c = i[f.expando];
                if (c) {
                    b = d[c];
                    if (b && b.events) {
                        for (var j in b.events) e[j] ? f.event.remove(i, j) : f.removeEvent(i, j, b.handle);
                        b.handle && (b.handle.elem = null)
                    }
                    g ? delete i[f.expando] : i.removeAttribute && i.removeAttribute(f.expando), delete d[c]
                }
            }
        }
    });
    var pb = /alpha\([^)]*\)/i,
        qb = /opacity=([^)]*)/,
        rb = /([A-Z]|^ms)/g,
        sb = /^[\-+]?(?:\d*\.)?\d+$/i,
        tb = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
        ub = /^([\-+])=([\-+.\de]+)/,
        vb = /^margin/,
        wb = {
            position: "absolute",
            visibility: "hidden",
            display: "block"
        },
        xb = ["Top", "Right", "Bottom", "Left"],
        yb, zb, Ab;
    f.fn.css = function (a, c) {
        return f.access(this, function (a, c, d) {
            return d !== b ? f.style(a, c, d) : f.css(a, c)
        }, a, c, arguments.length > 1)
    }, f.extend({
        cssHooks: {
            opacity: {
                get: function (a, b) {
                    if (b) {
                        var c = yb(a, "opacity");
                        return c === "" ? "1" : c
                    }
                    return a.style.opacity
                }
            }
        },
        cssNumber: {
            fillOpacity: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {
            "float": f.support.cssFloat ? "cssFloat" : "styleFloat"
        },
        style: function (a, c, d, e) {
            if (!a || a.nodeType === 3 || a.nodeType === 8 || !a.style) return;
            var g, h, i = f.camelCase(c),
                j = a.style,
                k = f.cssHooks[i];
            c = f.cssProps[i] || i;
            if (d === b) return k && "get" in k && (g = k.get(a, !1, e)) !== b ? g : j[c];
            h = typeof d, h === "string" && (g = ub.exec(d)) && (d = +(g[1] + 1) * +g[2] + parseFloat(f.css(a, c)), h = "number");
            if (d == null || h === "number" && isNaN(d)) return;
            h === "number" && !f.cssNumber[i] && (d += "px");
            if (!k || !("set" in k) || (d = k.set(a, d)) !== b) try {
                j[c] = d
            } catch (l) {}
        },
        css: function (a, c, d) {
            var e, g;
            c = f.camelCase(c), g = f.cssHooks[c], c = f.cssProps[c] || c, c === "cssFloat" && (c = "float");
            if (g && "get" in g && (e = g.get(a, !0, d)) !== b) return e;
            if (yb) return yb(a, c)
        },
        swap: function (a, b, c) {
            var d = {},
                e, f;
            for (f in b) d[f] = a.style[f], a.style[f] = b[f];
            e = c.call(a);
            for (f in b) a.style[f] = d[f];
            return e
        }
    }), f.curCSS = f.css, c.defaultView && c.defaultView.getComputedStyle && (zb = function (a, b) {
        var c, d, e, g, h = a.style;
        return b = b.replace(rb, "-$1").toLowerCase(), (d = a.ownerDocument.defaultView) && (e = d.getComputedStyle(a, null)) && (c = e.getPropertyValue(b), c === "" && !f.contains(a.ownerDocument.documentElement, a) && (c = f.style(a, b))), !f.support.pixelMargin && e && vb.test(b) && tb.test(c) && (g = h.width, h.width = c, c = e.width, h.width = g), c
    }), c.documentElement.currentStyle && (Ab = function (a, b) {
        var c, d, e, f = a.currentStyle && a.currentStyle[b],
            g = a.style;
        return f == null && g && (e = g[b]) && (f = e), tb.test(f) && (c = g.left, d = a.runtimeStyle && a.runtimeStyle.left, d && (a.runtimeStyle.left = a.currentStyle.left), g.left = b === "fontSize" ? "1em" : f, f = g.pixelLeft + "px", g.left = c, d && (a.runtimeStyle.left = d)), f === "" ? "auto" : f
    }), yb = zb || Ab, f.each(["height", "width"], function (a, b) {
        f.cssHooks[b] = {
            get: function (a, c, d) {
                if (c) return a.offsetWidth !== 0 ? Bb(a, b, d) : f.swap(a, wb, function () {
                    return Bb(a, b, d)
                })
            },
            set: function (a, b) {
                return sb.test(b) ? b + "px" : b
            }
        }
    }), f.support.opacity || (f.cssHooks.opacity = {
        get: function (a, b) {
            return qb.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "" : b ? "1" : ""
        },
        set: function (a, b) {
            var c = a.style,
                d = a.currentStyle,
                e = f.isNumeric(b) ? "alpha(opacity=" + b * 100 + ")" : "",
                g = d && d.filter || c.filter || "";
            c.zoom = 1;
            if (b >= 1 && f.trim(g.replace(pb, "")) === "") {
                c.removeAttribute("filter");
                if (d && !d.filter) return
            }
            c.filter = pb.test(g) ? g.replace(pb, e) : g + " " + e
        }
    }), f(function () {
        f.support.reliableMarginRight || (f.cssHooks.marginRight = {
            get: function (a, b) {
                return f.swap(a, {
                    display: "inline-block"
                }, function () {
                    return b ? yb(a, "margin-right") : a.style.marginRight
                })
            }
        })
    }), f.expr && f.expr.filters && (f.expr.filters.hidden = function (a) {
        var b = a.offsetWidth,
            c = a.offsetHeight;
        return b === 0 && c === 0 || !f.support.reliableHiddenOffsets && (a.style && a.style.display || f.css(a, "display")) === "none"
    }, f.expr.filters.visible = function (a) {
        return !f.expr.filters.hidden(a)
    }), f.each({
        margin: "",
        padding: "",
        border: "Width"
    }, function (a, b) {
        f.cssHooks[a + b] = {
            expand: function (c) {
                var d, e = typeof c == "string" ? c.split(" ") : [c],
                    f = {};
                for (d = 0; d < 4; d++) f[a + xb[d] + b] = e[d] || e[d - 2] || e[0];
                return f
            }
        }
    });
    var Cb = /%20/g,
        Db = /\[\]$/,
        Eb = /\r?\n/g,
        Fb = /#.*$/,
        Gb = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
        Hb = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
        Ib = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
        Jb = /^(?:GET|HEAD)$/,
        Kb = /^\/\//,
        Lb = /\?/,
        Mb = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
        Nb = /^(?:select|textarea)/i,
        Ob = /\s+/,
        Pb = /([?&])_=[^&]*/,
        Qb = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
        Rb = f.fn.load,
        Sb = {},
        Tb = {},
        Ub, Vb, Wb = ["*/"] + ["*"];
    try {
        Ub = e.href
    } catch (Xb) {
        Ub = c.createElement("a"), Ub.href = "", Ub = Ub.href
    }
    Vb = Qb.exec(Ub.toLowerCase()) || [], f.fn.extend({
        load: function (a, c, d) {
            if (typeof a != "string" && Rb) return Rb.apply(this, arguments);
            if (!this.length) return this;
            var e = a.indexOf(" ");
            if (e >= 0) {
                var g = a.slice(e, a.length);
                a = a.slice(0, e)
            }
            var h = "GET";
            c && (f.isFunction(c) ? (d = c, c = b) : typeof c == "object" && (c = f.param(c, f.ajaxSettings.traditional), h = "POST"));
            var i = this;
            return f.ajax({
                url: a,
                type: h,
                dataType: "html",
                data: c,
                complete: function (a, b, c) {
                    c = a.responseText, a.isResolved() && (a.done(function (a) {
                        c = a
                    }), i.html(g ? f("<div>").append(c.replace(Mb, "")).find(g) : c)), d && i.each(d, [c, b, a])
                }
            }), this
        },
        serialize: function () {
            return f.param(this.serializeArray())
        },
        serializeArray: function () {
            return this.map(function () {
                return this.elements ? f.makeArray(this.elements) : this
            }).filter(function () {
                return this.name && !this.disabled && (this.checked || Nb.test(this.nodeName) || Hb.test(this.type))
            }).map(function (a, b) {
                var c = f(this).val();
                return c == null ? null : f.isArray(c) ? f.map(c, function (a, c) {
                    return {
                        name: b.name,
                        value: a.replace(Eb, "\r\n")
                    }
                }) : {
                    name: b.name,
                    value: c.replace(Eb, "\r\n")
                }
            }).get()
        }
    }), f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function (a, b) {
        f.fn[b] = function (a) {
            return this.on(b, a)
        }
    }), f.each(["get", "post"], function (a, c) {
        f[c] = function (a, d, e, g) {
            return f.isFunction(d) && (g = g || e, e = d, d = b), f.ajax({
                type: c,
                url: a,
                data: d,
                success: e,
                dataType: g
            })
        }
    }), f.extend({
        getScript: function (a, c) {
            return f.get(a, b, c, "script")
        },
        getJSON: function (a, b, c) {
            return f.get(a, b, c, "json")
        },
        ajaxSetup: function (a, b) {
            return b ? $b(a, f.ajaxSettings) : (b = a, a = f.ajaxSettings), $b(a, b), a
        },
        ajaxSettings: {
            url: Ub,
            isLocal: Ib.test(Vb[1]),
            global: !0,
            type: "GET",
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            processData: !0,
            async: !0,
            accepts: {
                xml: "application/xml, text/xml",
                html: "text/html",
                text: "text/plain",
                json: "application/json, text/javascript",
                "*": Wb
            },
            contents: {
                xml: /xml/,
                html: /html/,
                json: /json/
            },
            responseFields: {
                xml: "responseXML",
                text: "responseText"
            },
            converters: {
                "* text": a.String,
                "text html": !0,
                "text json": f.parseJSON,
                "text xml": f.parseXML
            },
            flatOptions: {
                context: !0,
                url: !0
            }
        },
        ajaxPrefilter: Yb(Sb),
        ajaxTransport: Yb(Tb),
        ajax: function (a, c) {
            function w(a, c, l, m) {
                if (s === 2) return;
                s = 2, q && clearTimeout(q), p = b, n = m || "", v.readyState = a > 0 ? 4 : 0;
                var o, r, u, w = c,
                    x = l ? ac(d, v, l) : b,
                    y, z;
                if (a >= 200 && a < 300 || a === 304) {
                    if (d.ifModified) {
                        if (y = v.getResponseHeader("Last-Modified")) f.lastModified[k] = y;
                        if (z = v.getResponseHeader("Etag")) f.etag[k] = z
                    }
                    if (a === 304) w = "notmodified", o = !0;
                    else try {
                        r = bc(d, x), w = "success", o = !0
                    } catch (A) {
                        w = "parsererror", u = A
                    }
                } else {
                    u = w;
                    if (!w || a) w = "error", a < 0 && (a = 0)
                }
                v.status = a, v.statusText = "" + (c || w), o ? h.resolveWith(e, [r, w, v]) : h.rejectWith(e, [v, w, u]), v.statusCode(j), j = b, t && g.trigger("ajax" + (o ? "Success" : "Error"), [v, d, o ? r : u]), i.fireWith(e, [v, w]), t && (g.trigger("ajaxComplete", [v, d]), --f.active || f.event.trigger("ajaxStop"))
            }
            typeof a == "object" && (c = a, a = b), c = c || {};
            var d = f.ajaxSetup({}, c),
                e = d.context || d,
                g = e !== d && (e.nodeType || e instanceof f) ? f(e) : f.event,
                h = f.Deferred(),
                i = f.Callbacks("once memory"),
                j = d.statusCode || {},
                k, l = {},
                m = {},
                n, o, p, q, r, s = 0,
                t, u, v = {
                    readyState: 0,
                    setRequestHeader: function (a, b) {
                        if (!s) {
                            var c = a.toLowerCase();
                            a = m[c] = m[c] || a, l[a] = b
                        }
                        return this
                    },
                    getAllResponseHeaders: function () {
                        return s === 2 ? n : null
                    },
                    getResponseHeader: function (a) {
                        var c;
                        if (s === 2) {
                            if (!o) {
                                o = {};
                                while (c = Gb.exec(n)) o[c[1].toLowerCase()] = c[2]
                            }
                            c = o[a.toLowerCase()]
                        }
                        return c === b ? null : c
                    },
                    overrideMimeType: function (a) {
                        return s || (d.mimeType = a), this
                    },
                    abort: function (a) {
                        return a = a || "abort", p && p.abort(a), w(0, a), this
                    }
                };
            h.promise(v), v.success = v.done, v.error = v.fail, v.complete = i.add, v.statusCode = function (a) {
                if (a) {
                    var b;
                    if (s < 2) for (b in a) j[b] = [j[b], a[b]];
                    else b = a[v.status], v.then(b, b)
                }
                return this
            }, d.url = ((a || d.url) + "").replace(Fb, "").replace(Kb, Vb[1] + "//"), d.dataTypes = f.trim(d.dataType || "*").toLowerCase().split(Ob), d.crossDomain == null && (r = Qb.exec(d.url.toLowerCase()), d.crossDomain = !(!r || r[1] == Vb[1] && r[2] == Vb[2] && (r[3] || (r[1] === "http:" ? 80 : 443)) == (Vb[3] || (Vb[1] === "http:" ? 80 : 443)))), d.data && d.processData && typeof d.data != "string" && (d.data = f.param(d.data, d.traditional)), Zb(Sb, d, c, v);
            if (s === 2) return !1;
            t = d.global, d.type = d.type.toUpperCase(), d.hasContent = !Jb.test(d.type), t && f.active++ === 0 && f.event.trigger("ajaxStart");
            if (!d.hasContent) {
                d.data && (d.url += (Lb.test(d.url) ? "&" : "?") + d.data, delete d.data), k = d.url;
                if (d.cache === !1) {
                    var x = f.now(),
                        y = d.url.replace(Pb, "$1_=" + x);
                    d.url = y + (y === d.url ? (Lb.test(d.url) ? "&" : "?") + "_=" + x : "")
                }
            }(d.data && d.hasContent && d.contentType !== !1 || c.contentType) && v.setRequestHeader("Content-Type", d.contentType), d.ifModified && (k = k || d.url, f.lastModified[k] && v.setRequestHeader("If-Modified-Since", f.lastModified[k]), f.etag[k] && v.setRequestHeader("If-None-Match", f.etag[k])), v.setRequestHeader("Accept", d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + (d.dataTypes[0] !== "*" ? ", " + Wb + "; q=0.01" : "") : d.accepts["*"]);
            for (u in d.headers) v.setRequestHeader(u, d.headers[u]);
            if (!d.beforeSend || d.beforeSend.call(e, v, d) !== !1 && s !== 2) {
                for (u in {
                    success: 1,
                    error: 1,
                    complete: 1
                }) v[u](d[u]);
                p = Zb(Tb, d, c, v);
                if (!p) w(-1, "No Transport");
                else {
                    v.readyState = 1, t && g.trigger("ajaxSend", [v, d]), d.async && d.timeout > 0 && (q = setTimeout(function () {
                        v.abort("timeout")
                    }, d.timeout));
                    try {
                        s = 1, p.send(l, w)
                    } catch (z) {
                        if (!(s < 2)) throw z;
                        w(-1, z)
                    }
                }
                return v
            }
            return v.abort(), !1
        },
        param: function (a, c) {
            var d = [],
                e = function (a, b) {
                    b = f.isFunction(b) ? b() : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
                };
            c === b && (c = f.ajaxSettings.traditional);
            if (f.isArray(a) || a.jquery && !f.isPlainObject(a)) f.each(a, function () {
                e(this.name, this.value)
            });
            else for (var g in a) _b(g, a[g], c, e);
            return d.join("&").replace(Cb, "+")
        }
    }), f.extend({
        active: 0,
        lastModified: {},
        etag: {}
    });
    var cc = f.now(),
        dc = /(\=)\?(&|$)|\?\?/i;
    f.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function () {
            return f.expando + "_" + cc++
        }
    }), f.ajaxPrefilter("json jsonp", function (b, c, d) {
        var e = typeof b.data == "string" && /^application\/x\-www\-form\-urlencoded/.test(b.contentType);
        if (b.dataTypes[0] === "jsonp" || b.jsonp !== !1 && (dc.test(b.url) || e && dc.test(b.data))) {
            var g, h = b.jsonpCallback = f.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback,
                i = a[h],
                j = b.url,
                k = b.data,
                l = "$1" + h + "$2";
            return b.jsonp !== !1 && (j = j.replace(dc, l), b.url === j && (e && (k = k.replace(dc, l)), b.data === k && (j += (/\?/.test(j) ? "&" : "?") + b.jsonp + "=" + h))), b.url = j, b.data = k, a[h] = function (a) {
                g = [a]
            }, d.always(function () {
                a[h] = i, g && f.isFunction(i) && a[h](g[0])
            }), b.converters["script json"] = function () {
                return g || f.error(h + " was not called"), g[0]
            }, b.dataTypes[0] = "json", "script"
        }
    }), f.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /javascript|ecmascript/
        },
        converters: {
            "text script": function (a) {
                return f.globalEval(a), a
            }
        }
    }), f.ajaxPrefilter("script", function (a) {
        a.cache === b && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
    }), f.ajaxTransport("script", function (a) {
        if (a.crossDomain) {
            var d, e = c.head || c.getElementsByTagName("head")[0] || c.documentElement;
            return {
                send: function (f, g) {
                    d = c.createElement("script"), d.async = "async", a.scriptCharset && (d.charset = a.scriptCharset), d.src = a.url, d.onload = d.onreadystatechange = function (a, c) {
                        if (c || !d.readyState || /loaded|complete/.test(d.readyState)) d.onload = d.onreadystatechange = null, e && d.parentNode && e.removeChild(d), d = b, c || g(200, "success")
                    }, e.insertBefore(d, e.firstChild)
                },
                abort: function () {
                    d && d.onload(0, 1)
                }
            }
        }
    });
    var ec = a.ActiveXObject ?
    function () {
        for (var a in gc) gc[a](0, 1)
    } : !1, fc = 0, gc;
    f.ajaxSettings.xhr = a.ActiveXObject ?
    function () {
        return !this.isLocal && hc() || ic()
    } : hc, function (a) {
        f.extend(f.support, {
            ajax: !! a,
            cors: !! a && "withCredentials" in a
        })
    }(f.ajaxSettings.xhr()), f.support.ajax && f.ajaxTransport(function (c) {
        if (!c.crossDomain || f.support.cors) {
            var d;
            return {
                send: function (e, g) {
                    var h = c.xhr(),
                        i, j;
                    c.username ? h.open(c.type, c.url, c.async, c.username, c.password) : h.open(c.type, c.url, c.async);
                    if (c.xhrFields) for (j in c.xhrFields) h[j] = c.xhrFields[j];
                    c.mimeType && h.overrideMimeType && h.overrideMimeType(c.mimeType), !c.crossDomain && !e["X-Requested-With"] && (e["X-Requested-With"] = "XMLHttpRequest");
                    try {
                        for (j in e) h.setRequestHeader(j, e[j])
                    } catch (k) {}
                    h.send(c.hasContent && c.data || null), d = function (a, e) {
                        var j, k, l, m, n;
                        try {
                            if (d && (e || h.readyState === 4)) {
                                d = b, i && (h.onreadystatechange = f.noop, ec && delete gc[i]);
                                if (e) h.readyState !== 4 && h.abort();
                                else {
                                    j = h.status, l = h.getAllResponseHeaders(), m = {}, n = h.responseXML, n && n.documentElement && (m.xml = n);
                                    try {
                                        m.text = h.responseText
                                    } catch (a) {}
                                    try {
                                        k = h.statusText
                                    } catch (o) {
                                        k = ""
                                    }!j && c.isLocal && !c.crossDomain ? j = m.text ? 200 : 404 : j === 1223 && (j = 204)
                                }
                            }
                        } catch (p) {
                            e || g(-1, p)
                        }
                        m && g(j, k, m, l)
                    }, !c.async || h.readyState === 4 ? d() : (i = ++fc, ec && (gc || (gc = {}, f(a).unload(ec)), gc[i] = d), h.onreadystatechange = d)
                },
                abort: function () {
                    d && d(0, 1)
                }
            }
        }
    });
    var jc = {},
        kc, lc, mc = /^(?:toggle|show|hide)$/,
        nc = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
        oc, pc = [
            ["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"],
            ["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"],
            ["opacity"]
        ],
        qc;
    f.fn.extend({
        show: function (a, b, c) {
            var d, e;
            if (a || a === 0) return this.animate(tc("show", 3), a, b, c);
            for (var g = 0, h = this.length; g < h; g++) d = this[g], d.style && (e = d.style.display, !f._data(d, "olddisplay") && e === "none" && (e = d.style.display = ""), (e === "" && f.css(d, "display") === "none" || !f.contains(d.ownerDocument.documentElement, d)) && f._data(d, "olddisplay", uc(d.nodeName)));
            for (g = 0; g < h; g++) {
                d = this[g];
                if (d.style) {
                    e = d.style.display;
                    if (e === "" || e === "none") d.style.display = f._data(d, "olddisplay") || ""
                }
            }
            return this
        },
        hide: function (a, b, c) {
            if (a || a === 0) return this.animate(tc("hide", 3), a, b, c);
            var d, e, g = 0,
                h = this.length;
            for (; g < h; g++) d = this[g], d.style && (e = f.css(d, "display"), e !== "none" && !f._data(d, "olddisplay") && f._data(d, "olddisplay", e));
            for (g = 0; g < h; g++) this[g].style && (this[g].style.display = "none");
            return this
        },
        _toggle: f.fn.toggle,
        toggle: function (a, b, c) {
            var d = typeof a == "boolean";
            return f.isFunction(a) && f.isFunction(b) ? this._toggle.apply(this, arguments) : a == null || d ? this.each(function () {
                var b = d ? a : f(this).is(":hidden");
                f(this)[b ? "show" : "hide"]()
            }) : this.animate(tc("toggle", 3), a, b, c), this
        },
        fadeTo: function (a, b, c, d) {
            return this.filter(":hidden").css("opacity", 0).show().end().animate({
                opacity: b
            }, a, c, d)
        },
        animate: function (a, b, c, d) {
            function g() {
                e.queue === !1 && f._mark(this);
                var b = f.extend({}, e),
                    c = this.nodeType === 1,
                    d = c && f(this).is(":hidden"),
                    g, h, i, j, k, l, m, n, o, p, q;
                b.animatedProperties = {};
                for (i in a) {
                    g = f.camelCase(i), i !== g && (a[g] = a[i], delete a[i]);
                    if ((k = f.cssHooks[g]) && "expand" in k) {
                        l = k.expand(a[g]), delete a[g];
                        for (i in l) i in a || (a[i] = l[i])
                    }
                }
                for (g in a) {
                    h = a[g], f.isArray(h) ? (b.animatedProperties[g] = h[1], h = a[g] = h[0]) : b.animatedProperties[g] = b.specialEasing && b.specialEasing[g] || b.easing || "swing";
                    if (h === "hide" && d || h === "show" && !d) return b.complete.call(this);
                    c && (g === "height" || g === "width") && (b.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY], f.css(this, "display") === "inline" && f.css(this, "float") === "none" && (!f.support.inlineBlockNeedsLayout || uc(this.nodeName) === "inline" ? this.style.display = "inline-block" : this.style.zoom = 1))
                }
                b.overflow != null && (this.style.overflow = "hidden");
                for (i in a) j = new f.fx(this, b, i), h = a[i], mc.test(h) ? (q = f._data(this, "toggle" + i) || (h === "toggle" ? d ? "show" : "hide" : 0), q ? (f._data(this, "toggle" + i, q === "show" ? "hide" : "show"), j[q]()) : j[h]()) : (m = nc.exec(h), n = j.cur(), m ? (o = parseFloat(m[2]), p = m[3] || (f.cssNumber[i] ? "" : "px"), p !== "px" && (f.style(this, i, (o || 1) + p), n = (o || 1) / j.cur() * n, f.style(this, i, n + p)), m[1] && (o = (m[1] === "-=" ? -1 : 1) * o + n), j.custom(n, o, p)) : j.custom(n, h, ""));
                return !0
            }
            var e = f.speed(b, c, d);
            return f.isEmptyObject(a) ? this.each(e.complete, [!1]) : (a = f.extend({}, a), e.queue === !1 ? this.each(g) : this.queue(e.queue, g))
        },
        stop: function (a, c, d) {
            return typeof a != "string" && (d = c, c = a, a = b), c && a !== !1 && this.queue(a || "fx", []), this.each(function () {
                function h(a, b, c) {
                    var e = b[c];
                    f.removeData(a, c, !0), e.stop(d)
                }
                var b, c = !1,
                    e = f.timers,
                    g = f._data(this);
                d || f._unmark(!0, this);
                if (a == null) for (b in g) g[b] && g[b].stop && b.indexOf(".run") === b.length - 4 && h(this, g, b);
                else g[b = a + ".run"] && g[b].stop && h(this, g, b);
                for (b = e.length; b--;) e[b].elem === this && (a == null || e[b].queue === a) && (d ? e[b](!0) : e[b].saveState(), c = !0, e.splice(b, 1));
                (!d || !c) && f.dequeue(this, a)
            })
        }
    }), f.each({
        slideDown: tc("show", 1),
        slideUp: tc("hide", 1),
        slideToggle: tc("toggle", 1),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        },
        fadeToggle: {
            opacity: "toggle"
        }
    }, function (a, b) {
        f.fn[a] = function (a, c, d) {
            return this.animate(b, a, c, d)
        }
    }), f.extend({
        speed: function (a, b, c) {
            var d = a && typeof a == "object" ? f.extend({}, a) : {
                complete: c || !c && b || f.isFunction(a) && a,
                duration: a,
                easing: c && b || b && !f.isFunction(b) && b
            };
            d.duration = f.fx.off ? 0 : typeof d.duration == "number" ? d.duration : d.duration in f.fx.speeds ? f.fx.speeds[d.duration] : f.fx.speeds._default;
            if (d.queue == null || d.queue === !0) d.queue = "fx";
            return d.old = d.complete, d.complete = function (a) {
                f.isFunction(d.old) && d.old.call(this), d.queue ? f.dequeue(this, d.queue) : a !== !1 && f._unmark(this)
            }, d
        },
        easing: {
            linear: function (a) {
                return a
            },
            swing: function (a) {
                return -Math.cos(a * Math.PI) / 2 + .5
            }
        },
        timers: [],
        fx: function (a, b, c) {
            this.options = b, this.elem = a, this.prop = c, b.orig = b.orig || {}
        }
    }), f.fx.prototype = {
        update: function () {
            this.options.step && this.options.step.call(this.elem, this.now, this), (f.fx.step[this.prop] || f.fx.step._default)(this)
        },
        cur: function () {
            if (this.elem[this.prop] == null || !! this.elem.style && this.elem.style[this.prop] != null) {
                var a, b = f.css(this.elem, this.prop);
                return isNaN(a = parseFloat(b)) ? !b || b === "auto" ? 0 : b : a
            }
            return this.elem[this.prop]
        },
        custom: function (a, c, d) {
            function h(a) {
                return e.step(a)
            }
            var e = this,
                g = f.fx;
            this.startTime = qc || rc(), this.end = c, this.now = this.start = a, this.pos = this.state = 0, this.unit = d || this.unit || (f.cssNumber[this.prop] ? "" : "px"), h.queue = this.options.queue, h.elem = this.elem, h.saveState = function () {
                f._data(e.elem, "fxshow" + e.prop) === b && (e.options.hide ? f._data(e.elem, "fxshow" + e.prop, e.start) : e.options.show && f._data(e.elem, "fxshow" + e.prop, e.end))
            }, h() && f.timers.push(h) && !oc && (oc = setInterval(g.tick, g.interval))
        },
        show: function () {
            var a = f._data(this.elem, "fxshow" + this.prop);
            this.options.orig[this.prop] = a || f.style(this.elem, this.prop), this.options.show = !0, a !== b ? this.custom(this.cur(), a) : this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur()), f(this.elem).show()
        },
        hide: function () {
            this.options.orig[this.prop] = f._data(this.elem, "fxshow" + this.prop) || f.style(this.elem, this.prop), this.options.hide = !0, this.custom(this.cur(), 0)
        },
        step: function (a) {
            var b, c, d, e = qc || rc(),
                g = !0,
                h = this.elem,
                i = this.options;
            if (a || e >= i.duration + this.startTime) {
                this.now = this.end, this.pos = this.state = 1, this.update(), i.animatedProperties[this.prop] = !0;
                for (b in i.animatedProperties) i.animatedProperties[b] !== !0 && (g = !1);
                if (g) {
                    i.overflow != null && !f.support.shrinkWrapBlocks && f.each(["", "X", "Y"], function (a, b) {
                        h.style["overflow" + b] = i.overflow[a]
                    }), i.hide && f(h).hide();
                    if (i.hide || i.show) for (b in i.animatedProperties) f.style(h, b, i.orig[b]), f.removeData(h, "fxshow" + b, !0), f.removeData(h, "toggle" + b, !0);
                    d = i.complete, d && (i.complete = !1, d.call(h))
                }
                return !1
            }
            return i.duration == Infinity ? this.now = e : (c = e - this.startTime, this.state = c / i.duration, this.pos = f.easing[i.animatedProperties[this.prop]](this.state, c, 0, 1, i.duration), this.now = this.start + (this.end - this.start) * this.pos), this.update(), !0
        }
    }, f.extend(f.fx, {
        tick: function () {
            var a, b = f.timers,
                c = 0;
            for (; c < b.length; c++) a = b[c], !a() && b[c] === a && b.splice(c--, 1);
            b.length || f.fx.stop()
        },
        interval: 13,
        stop: function () {
            clearInterval(oc), oc = null
        },
        speeds: {
            slow: 600,
            fast: 200,
            _default: 400
        },
        step: {
            opacity: function (a) {
                f.style(a.elem, "opacity", a.now)
            },
            _default: function (a) {
                a.elem.style && a.elem.style[a.prop] != null ? a.elem.style[a.prop] = a.now + a.unit : a.elem[a.prop] = a.now
            }
        }
    }), f.each(pc.concat.apply([], pc), function (a, b) {
        b.indexOf("margin") && (f.fx.step[b] = function (a) {
            f.style(a.elem, b, Math.max(0, a.now) + a.unit)
        })
    }), f.expr && f.expr.filters && (f.expr.filters.animated = function (a) {
        return f.grep(f.timers, function (b) {
            return a === b.elem
        }).length
    });
    var vc, wc = /^t(?:able|d|h)$/i,
        xc = /^(?:body|html)$/i;
    "getBoundingClientRect" in c.documentElement ? vc = function (a, b, c, d) {
        try {
            d = a.getBoundingClientRect()
        } catch (e) {}
        if (!d || !f.contains(c, a)) return d ? {
            top: d.top,
            left: d.left
        } : {
            top: 0,
            left: 0
        };
        var g = b.body,
            h = yc(b),
            i = c.clientTop || g.clientTop || 0,
            j = c.clientLeft || g.clientLeft || 0,
            k = h.pageYOffset || f.support.boxModel && c.scrollTop || g.scrollTop,
            l = h.pageXOffset || f.support.boxModel && c.scrollLeft || g.scrollLeft,
            m = d.top + k - i,
            n = d.left + l - j;
        return {
            top: m,
            left: n
        }
    } : vc = function (a, b, c) {
        var d, e = a.offsetParent,
            g = a,
            h = b.body,
            i = b.defaultView,
            j = i ? i.getComputedStyle(a, null) : a.currentStyle,
            k = a.offsetTop,
            l = a.offsetLeft;
        while ((a = a.parentNode) && a !== h && a !== c) {
            if (f.support.fixedPosition && j.position === "fixed") break;
            d = i ? i.getComputedStyle(a, null) : a.currentStyle, k -= a.scrollTop, l -= a.scrollLeft, a === e && (k += a.offsetTop, l += a.offsetLeft, f.support.doesNotAddBorder && (!f.support.doesAddBorderForTableAndCells || !wc.test(a.nodeName)) && (k += parseFloat(d.borderTopWidth) || 0, l += parseFloat(d.borderLeftWidth) || 0), g = e, e = a.offsetParent), f.support.subtractsBorderForOverflowNotVisible && d.overflow !== "visible" && (k += parseFloat(d.borderTopWidth) || 0, l += parseFloat(d.borderLeftWidth) || 0), j = d
        }
        if (j.position === "relative" || j.position === "static") k += h.offsetTop, l += h.offsetLeft;
        return f.support.fixedPosition && j.position === "fixed" && (k += Math.max(c.scrollTop, h.scrollTop), l += Math.max(c.scrollLeft, h.scrollLeft)), {
            top: k,
            left: l
        }
    }, f.fn.offset = function (a) {
        if (arguments.length) return a === b ? this : this.each(function (b) {
            f.offset.setOffset(this, a, b)
        });
        var c = this[0],
            d = c && c.ownerDocument;
        return d ? c === d.body ? f.offset.bodyOffset(c) : vc(c, d, d.documentElement) : null
    }, f.offset = {
        bodyOffset: function (a) {
            var b = a.offsetTop,
                c = a.offsetLeft;
            return f.support.doesNotIncludeMarginInBodyOffset && (b += parseFloat(f.css(a, "marginTop")) || 0, c += parseFloat(f.css(a, "marginLeft")) || 0), {
                top: b,
                left: c
            }
        },
        setOffset: function (a, b, c) {
            var d = f.css(a, "position");
            d === "static" && (a.style.position = "relative");
            var e = f(a),
                g = e.offset(),
                h = f.css(a, "top"),
                i = f.css(a, "left"),
                j = (d === "absolute" || d === "fixed") && f.inArray("auto", [h, i]) > -1,
                k = {},
                l = {},
                m, n;
            j ? (l = e.position(), m = l.top, n = l.left) : (m = parseFloat(h) || 0, n = parseFloat(i) || 0), f.isFunction(b) && (b = b.call(a, c, g)), b.top != null && (k.top = b.top - g.top + m), b.left != null && (k.left = b.left - g.left + n), "using" in b ? b.using.call(a, k) : e.css(k)
        }
    }, f.fn.extend({
        position: function () {
            if (!this[0]) return null;
            var a = this[0],
                b = this.offsetParent(),
                c = this.offset(),
                d = xc.test(b[0].nodeName) ? {
                    top: 0,
                    left: 0
                } : b.offset();
            return c.top -= parseFloat(f.css(a, "marginTop")) || 0, c.left -= parseFloat(f.css(a, "marginLeft")) || 0, d.top += parseFloat(f.css(b[0], "borderTopWidth")) || 0, d.left += parseFloat(f.css(b[0], "borderLeftWidth")) || 0, {
                top: c.top - d.top,
                left: c.left - d.left
            }
        },
        offsetParent: function () {
            return this.map(function () {
                var a = this.offsetParent || c.body;
                while (a && !xc.test(a.nodeName) && f.css(a, "position") === "static") a = a.offsetParent;
                return a
            })
        }
    }), f.each({
        scrollLeft: "pageXOffset",
        scrollTop: "pageYOffset"
    }, function (a, c) {
        var d = /Y/.test(c);
        f.fn[a] = function (e) {
            return f.access(this, function (a, e, g) {
                var h = yc(a);
                if (g === b) return h ? c in h ? h[c] : f.support.boxModel && h.document.documentElement[e] || h.document.body[e] : a[e];
                h ? h.scrollTo(d ? f(h).scrollLeft() : g, d ? g : f(h).scrollTop()) : a[e] = g
            }, a, e, arguments.length, null)
        }
    }), f.each({
        Height: "height",
        Width: "width"
    }, function (a, c) {
        var d = "client" + a,
            e = "scroll" + a,
            g = "offset" + a;
        f.fn["inner" + a] = function () {
            var a = this[0];
            return a ? a.style ? parseFloat(f.css(a, c, "padding")) : this[c]() : null
        }, f.fn["outer" + a] = function (a) {
            var b = this[0];
            return b ? b.style ? parseFloat(f.css(b, c, a ? "margin" : "border")) : this[c]() : null
        }, f.fn[c] = function (a) {
            return f.access(this, function (a, c, h) {
                var i, j, k, l;
                if (f.isWindow(a)) return i = a.document, j = i.documentElement[d], f.support.boxModel && j || i.body && i.body[d] || j;
                if (a.nodeType === 9) return i = a.documentElement, i[d] >= i[e] ? i[d] : Math.max(a.body[e], i[e], a.body[g], i[g]);
                if (h === b) return k = f.css(a, c), l = parseFloat(k), f.isNumeric(l) ? l : k;
                f(a).css(c, h)
            }, c, a, arguments.length, null)
        }
    }), a.jQuery = a.$ = f, typeof define == "function" && define.amd && define.amd.jQuery && define("vendor/jquery-1.7.2", [], function () {
        return f
    })
}(window), define("jquery.instructure_jquery_patches", ["vendor/jquery-1.7.2"], function (a) {
    a.each(["prop", "attr"], function (b, c) {
        a[c + "Hooks"].disabled = a.extend(a[c + "Hooks"].disabled, {
            set: function (b, c, d) {
                return a(b).toggleClass("disabled", !! c), b[c ? "setAttribute" : "removeAttribute"]("disabled", "disabled"), "disabled" in b && (b.disabled = !! c), c
            }
        })
    });
    var b = a.parseJSON;
    return a.parseJSON = function () {
        if (arguments[0]) try {
            var c = arguments[0].replace(/^while\(1\);/, "");
            arguments[0] = c
        } catch (d) {}
        return b.apply(a, arguments)
    }, a.ajaxSettings.converters["text json"] = a.parseJSON, a.attrHooks.method = a.extend(a.attrHooks.method, {
        set: function (b, c) {
            var d = c;
            c = c.toUpperCase() === "GET" ? "GET" : "POST";
            if (c === "POST") {
                var e = a(b).find("input[name='_method']");
                e.length || (e = a("<input type='hidden' name='_method'/>").prependTo(b)), e.val(d)
            }
            return b.setAttribute("method", c), c
        }
    }), a.fn.originalScrollTop = a.fn.scrollTop, a.fn.scrollTop = function () {
        return this.selector == "html,body" && arguments.length === 0 && console.error("$('html,body').scrollTop() is not cross-browser compatible... use $.windowScrollTop() instead"), a.fn.originalScrollTop.apply(this, arguments)
    }, a.windowScrollTop = function () {
        return (a.browser.safari ? a("body") : a("html")).scrollTop()
    }, a
}), define("jquery", ["jquery.instructure_jquery_patches"], function (a) {
    return a
}), function () {
    var a = this,
        b = a.Backbone,
        c = [],
        d = c.push,
        e = c.slice,
        f = c.splice,
        g;
    typeof exports != "undefined" ? g = exports : g = a.Backbone = {}, g.VERSION = "1.1.0";
    var h = a._;
    !h && typeof require != "undefined" && (h = require("underscore")), g.$ = a.jQuery || a.Zepto || a.ender || a.$, g.noConflict = function () {
        return a.Backbone = b, this
    }, g.emulateHTTP = !1, g.emulateJSON = !1;
    var i = g.Events = {
        on: function (a, b, c) {
            if (!k(this, "on", a, [b, c]) || !b) return this;
            this._events || (this._events = {});
            var d = this._events[a] || (this._events[a] = []);
            return d.push({
                callback: b,
                context: c,
                ctx: c || this
            }), this
        },
        once: function (a, b, c) {
            if (!k(this, "once", a, [b, c]) || !b) return this;
            var d = this,
                e = h.once(function () {
                    d.off(a, e), b.apply(this, arguments)
                });
            return e._callback = b, this.on(a, e, c)
        },
        off: function (a, b, c) {
            var d, e, f, g, i, j, l, m;
            if (!this._events || !k(this, "off", a, [b, c])) return this;
            if (!a && !b && !c) return this._events = {}, this;
            g = a ? [a] : h.keys(this._events);
            for (i = 0, j = g.length; i < j; i++) {
                a = g[i];
                if (f = this._events[a]) {
                    this._events[a] = d = [];
                    if (b || c) for (l = 0, m = f.length; l < m; l++) e = f[l], (b && b !== e.callback && b !== e.callback._callback || c && c !== e.context) && d.push(e);
                    d.length || delete this._events[a]
                }
            }
            return this
        },
        trigger: function (a) {
            if (!this._events) return this;
            var b = e.call(arguments, 1);
            if (!k(this, "trigger", a, b)) return this;
            var c = this._events[a],
                d = this._events.all;
            return c && l(c, b), d && l(d, arguments), this
        },
        stopListening: function (a, b, c) {
            var d = this._listeningTo;
            if (!d) return this;
            var e = !b && !c;
            !c && typeof b == "object" && (c = this), a && ((d = {})[a._listenId] = a);
            for (var f in d) a = d[f], a.off(b, c, this), (e || h.isEmpty(a._events)) && delete this._listeningTo[f];
            return this
        }
    },
        j = /\s+/,
        k = function (a, b, c, d) {
            if (!c) return !0;
            if (typeof c == "object") {
                for (var e in c) a[b].apply(a, [e, c[e]].concat(d));
                return !1
            }
            if (j.test(c)) {
                var f = c.split(j);
                for (var g = 0, h = f.length; g < h; g++) a[b].apply(a, [f[g]].concat(d));
                return !1
            }
            return !0
        },
        l = function (a, b) {
            var c, d = -1,
                e = a.length,
                f = b[0],
                g = b[1],
                h = b[2];
            switch (b.length) {
            case 0:
                while (++d < e)(c = a[d]).callback.call(c.ctx);
                return;
            case 1:
                while (++d < e)(c = a[d]).callback.call(c.ctx, f);
                return;
            case 2:
                while (++d < e)(c = a[d]).callback.call(c.ctx, f, g);
                return;
            case 3:
                while (++d < e)(c = a[d]).callback.call(c.ctx, f, g, h);
                return;
            default:
                while (++d < e)(c = a[d]).callback.apply(c.ctx, b)
            }
        },
        m = {
            listenTo: "on",
            listenToOnce: "once"
        };
    h.each(m, function (a, b) {
        i[b] = function (b, c, d) {
            var e = this._listeningTo || (this._listeningTo = {}),
                f = b._listenId || (b._listenId = h.uniqueId("l"));
            return e[f] = b, !d && typeof c == "object" && (d = this), b[a](c, d, this), this
        }
    }), i.bind = i.on, i.unbind = i.off, h.extend(g, i);
    var n = g.Model = function (a, b) {
            var c = a || {};
            b || (b = {}), this.cid = h.uniqueId("c"), this.attributes = {}, b.collection && (this.collection = b.collection), b.parse && (c = this.parse(c, b) || {}), c = h.defaults({}, c, h.result(this, "defaults")), this.set(c, b), this.changed = {}, this.initialize.apply(this, arguments)
        };
    h.extend(n.prototype, i, {
        changed: null,
        validationError: null,
        idAttribute: "id",
        initialize: function () {},
        toJSON: function (a) {
            return h.clone(this.attributes)
        },
        sync: function () {
            return g.sync.apply(this, arguments)
        },
        get: function (a) {
            return this.attributes[a]
        },
        escape: function (a) {
            return h.escape(this.get(a))
        },
        has: function (a) {
            return this.get(a) != null
        },
        set: function (a, b, c) {
            var d, e, f, g, i, j, k, l;
            if (a == null) return this;
            typeof a == "object" ? (e = a, c = b) : (e = {})[a] = b, c || (c = {});
            if (!this._validate(e, c)) return !1;
            f = c.unset, i = c.silent, g = [], j = this._changing, this._changing = !0, j || (this._previousAttributes = h.clone(this.attributes), this.changed = {}), l = this.attributes, k = this._previousAttributes, this.idAttribute in e && (this.id = e[this.idAttribute]);
            for (d in e) b = e[d], h.isEqual(l[d], b) || g.push(d), h.isEqual(k[d], b) ? delete this.changed[d] : this.changed[d] = b, f ? delete l[d] : l[d] = b;
            if (!i) {
                g.length && (this._pending = !0);
                for (var m = 0, n = g.length; m < n; m++) this.trigger("change:" + g[m], this, l[g[m]], c)
            }
            if (j) return this;
            if (!i) while (this._pending) this._pending = !1, this.trigger("change", this, c);
            return this._pending = !1, this._changing = !1, this
        },
        unset: function (a, b) {
            return this.set(a, void 0, h.extend({}, b, {
                unset: !0
            }))
        },
        clear: function (a) {
            var b = {};
            for (var c in this.attributes) b[c] = void 0;
            return this.set(b, h.extend({}, a, {
                unset: !0
            }))
        },
        hasChanged: function (a) {
            return a == null ? !h.isEmpty(this.changed) : h.has(this.changed, a)
        },
        changedAttributes: function (a) {
            if (!a) return this.hasChanged() ? h.clone(this.changed) : !1;
            var b, c = !1,
                d = this._changing ? this._previousAttributes : this.attributes;
            for (var e in a) {
                if (h.isEqual(d[e], b = a[e])) continue;
                (c || (c = {}))[e] = b
            }
            return c
        },
        previous: function (a) {
            return a == null || !this._previousAttributes ? null : this._previousAttributes[a]
        },
        previousAttributes: function () {
            return h.clone(this._previousAttributes)
        },
        fetch: function (a) {
            a = a ? h.clone(a) : {}, a.parse === void 0 && (a.parse = !0);
            var b = this,
                c = a.success;
            return a.success = function (d) {
                if (!b.set(b.parse(d, a), a)) return !1;
                c && c(b, d, a), b.trigger("sync", b, d, a)
            }, M(this, a), this.sync("read", this, a)
        },
        save: function (a, b, c) {
            var d, e, f, g = this.attributes;
            a == null || typeof a == "object" ? (d = a, c = b) : (d = {})[a] = b, c = h.extend({
                validate: !0
            }, c);
            if (d && !c.wait) {
                if (!this.set(d, c)) return !1
            } else if (!this._validate(d, c)) return !1;
            d && c.wait && (this.attributes = h.extend({}, g, d)), c.parse === void 0 && (c.parse = !0);
            var i = this,
                j = c.success;
            return c.success = function (a) {
                i.attributes = g;
                var b = i.parse(a, c);
                c.wait && (b = h.extend(d || {}, b));
                if (h.isObject(b) && !i.set(b, c)) return !1;
                j && j(i, a, c), i.trigger("sync", i, a, c)
            }, M(this, c), e = this.isNew() ? "create" : c.patch ? "patch" : "update", e === "patch" && (c.attrs = d), f = this.sync(e, this, c), d && c.wait && (this.attributes = g), f
        },
        destroy: function (a) {
            a = a ? h.clone(a) : {};
            var b = this,
                c = a.success,
                d = function () {
                    b.trigger("destroy", b, b.collection, a)
                };
            a.success = function (e) {
                (a.wait || b.isNew()) && d(), c && c(b, e, a), b.isNew() || b.trigger("sync", b, e, a)
            };
            if (this.isNew()) return a.success(), !1;
            M(this, a);
            var e = this.sync("delete", this, a);
            return a.wait || d(), e
        },
        url: function () {
            var a = h.result(this, "urlRoot") || h.result(this.collection, "url") || L();
            return this.isNew() ? a : a + (a.charAt(a.length - 1) === "/" ? "" : "/") + encodeURIComponent(this.id)
        },
        parse: function (a, b) {
            return a
        },
        clone: function () {
            return new this.constructor(this.attributes)
        },
        isNew: function () {
            return this.id == null
        },
        isValid: function (a) {
            return this._validate({}, h.extend(a || {}, {
                validate: !0
            }))
        },
        _validate: function (a, b) {
            if (!b.validate || !this.validate) return !0;
            a = h.extend({}, this.attributes, a);
            var c = this.validationError = this.validate(a, b) || null;
            return c ? (this.trigger("invalid", this, c, h.extend(b, {
                validationError: c
            })), !1) : !0
        }
    });
    var o = ["keys", "values", "pairs", "invert", "pick", "omit"];
    h.each(o, function (a) {
        n.prototype[a] = function () {
            var b = e.call(arguments);
            return b.unshift(this.attributes), h[a].apply(h, b)
        }
    });
    var p = g.Collection = function (a, b) {
            b || (b = {}), b.model && (this.model = b.model), b.comparator !== void 0 && (this.comparator = b.comparator), this._reset(), this.initialize.apply(this, arguments), a && this.reset(a, h.extend({
                silent: !0
            }, b))
        },
        q = {
            add: !0,
            remove: !0,
            merge: !0
        },
        r = {
            add: !0,
            remove: !1
        };
    h.extend(p.prototype, i, {
        model: n,
        initialize: function () {},
        toJSON: function (a) {
            return this.map(function (b) {
                return b.toJSON(a)
            })
        },
        sync: function () {
            return g.sync.apply(this, arguments)
        },
        add: function (a, b) {
            return this.set(a, h.extend({
                merge: !1
            }, b, r))
        },
        remove: function (a, b) {
            var c = !h.isArray(a);
            a = c ? [a] : h.clone(a), b || (b = {});
            var d, e, f, g;
            for (d = 0, e = a.length; d < e; d++) {
                g = a[d] = this.get(a[d]);
                if (!g) continue;
                delete this._byId[g.id], delete this._byId[g.cid], f = this.indexOf(g), this.models.splice(f, 1), this.length--, b.silent || (b.index = f, g.trigger("remove", g, this, b)), this._removeReference(g)
            }
            return c ? a[0] : a
        },
        set: function (a, b) {
            b = h.defaults({}, b, q), b.parse && (a = this.parse(a, b));
            var c = !h.isArray(a);
            a = c ? a ? [a] : [] : h.clone(a);
            var d, e, f, g, i, j, k, l = b.at,
                m = this.model,
                o = this.comparator && l == null && b.sort !== !1,
                p = h.isString(this.comparator) ? this.comparator : null,
                r = [],
                s = [],
                t = {},
                u = b.add,
                v = b.merge,
                w = b.remove,
                x = !o && u && w ? [] : !1;
            for (d = 0, e = a.length; d < e; d++) {
                i = a[d], i instanceof n ? f = g = i : f = i[m.prototype.idAttribute];
                if (j = this.get(f)) w && (t[j.cid] = !0), v && (i = i === g ? g.attributes : i, b.parse && (i = j.parse(i, b)), j.set(i, b), o && !k && j.hasChanged(p) && (k = !0)), a[d] = j;
                else if (u) {
                    g = a[d] = this._prepareModel(i, b);
                    if (!g) continue;
                    r.push(g), g.on("all", this._onModelEvent, this), this._byId[g.cid] = g, g.id != null && (this._byId[g.id] = g)
                }
                x && x.push(j || g)
            }
            if (w) {
                for (d = 0, e = this.length; d < e; ++d) t[(g = this.models[d]).cid] || s.push(g);
                s.length && this.remove(s, b)
            }
            if (r.length || x && x.length) {
                o && (k = !0), this.length += r.length;
                if (l != null) for (d = 0, e = r.length; d < e; d++) this.models.splice(l + d, 0, r[d]);
                else {
                    x && (this.models.length = 0);
                    var y = x || r;
                    for (d = 0, e = y.length; d < e; d++) this.models.push(y[d])
                }
            }
            k && this.sort({
                silent: !0
            });
            if (!b.silent) {
                for (d = 0, e = r.length; d < e; d++)(g = r[d]).trigger("add", g, this, b);
                (k || x && x.length) && this.trigger("sort", this, b)
            }
            return c ? a[0] : a
        },
        reset: function (a, b) {
            b || (b = {});
            for (var c = 0, d = this.models.length; c < d; c++) this._removeReference(this.models[c]);
            return b.previousModels = this.models, this._reset(), a = this.add(a, h.extend({
                silent: !0
            }, b)), b.silent || this.trigger("reset", this, b), a
        },
        push: function (a, b) {
            return this.add(a, h.extend({
                at: this.length
            }, b))
        },
        pop: function (a) {
            var b = this.at(this.length - 1);
            return this.remove(b, a), b
        },
        unshift: function (a, b) {
            return this.add(a, h.extend({
                at: 0
            }, b))
        },
        shift: function (a) {
            var b = this.at(0);
            return this.remove(b, a), b
        },
        slice: function () {
            return e.apply(this.models, arguments)
        },
        get: function (a) {
            return a == null ? void 0 : this._byId[a.id] || this._byId[a.cid] || this._byId[a]
        },
        at: function (a) {
            return this.models[a]
        },
        where: function (a, b) {
            return h.isEmpty(a) ? b ? void 0 : [] : this[b ? "find" : "filter"](function (b) {
                for (var c in a) if (a[c] !== b.get(c)) return !1;
                return !0
            })
        },
        findWhere: function (a) {
            return this.where(a, !0)
        },
        sort: function (a) {
            if (!this.comparator) throw new Error("Cannot sort a set without a comparator");
            return a || (a = {}), h.isString(this.comparator) || this.comparator.length === 1 ? this.models = this.sortBy(this.comparator, this) : this.models.sort(h.bind(this.comparator, this)), a.silent || this.trigger("sort", this, a), this
        },
        pluck: function (a) {
            return h.invoke(this.models, "get", a)
        },
        fetch: function (a) {
            a = a ? h.clone(a) : {}, a.parse === void 0 && (a.parse = !0);
            var b = a.success,
                c = this;
            return a.success = function (d) {
                var e = a.reset ? "reset" : "set";
                c[e](d, a), b && b(c, d, a), c.trigger("sync", c, d, a)
            }, M(this, a), this.sync("read", this, a)
        },
        create: function (a, b) {
            b = b ? h.clone(b) : {};
            if (!(a = this._prepareModel(a, b))) return !1;
            b.wait || this.add(a, b);
            var c = this,
                d = b.success;
            return b.success = function (a, b, e) {
                e.wait && c.add(a, e), d && d(a, b, e)
            }, a.save(null, b), a
        },
        parse: function (a, b) {
            return a
        },
        clone: function () {
            return new this.constructor(this.models)
        },
        _reset: function () {
            this.length = 0, this.models = [], this._byId = {}
        },
        _prepareModel: function (a, b) {
            if (a instanceof n) return a.collection || (a.collection = this), a;
            b = b ? h.clone(b) : {}, b.collection = this;
            var c = new this.model(a, b);
            return c.validationError ? (this.trigger("invalid", this, c.validationError, b), !1) : c
        },
        _removeReference: function (a) {
            this === a.collection && delete a.collection, a.off("all", this._onModelEvent, this)
        },
        _onModelEvent: function (a, b, c, d) {
            if ((a === "add" || a === "remove") && c !== this) return;
            a === "destroy" && this.remove(b, d), b && a === "change:" + b.idAttribute && (delete this._byId[b.previous(b.idAttribute)], b.id != null && (this._byId[b.id] = b)), this.trigger.apply(this, arguments)
        }
    });
    var s = ["forEach", "each", "map", "collect", "reduce", "foldl", "inject", "reduceRight", "foldr", "find", "detect", "filter", "select", "reject", "every", "all", "some", "any", "include", "contains", "invoke", "max", "min", "toArray", "size", "first", "head", "take", "initial", "rest", "tail", "drop", "last", "without", "difference", "indexOf", "shuffle", "lastIndexOf", "isEmpty", "chain"];
    h.each(s, function (a) {
        p.prototype[a] = function () {
            var b = e.call(arguments);
            return b.unshift(this.models), h[a].apply(h, b)
        }
    });
    var t = ["groupBy", "countBy", "sortBy"];
    h.each(t, function (a) {
        p.prototype[a] = function (b, c) {
            var d = h.isFunction(b) ? b : function (a) {
                    return a.get(b)
                };
            return h[a](this.models, d, c)
        }
    });
    var u = g.View = function (a) {
            this.cid = h.uniqueId("view"), a || (a = {}), h.extend(this, h.pick(a, w)), this._ensureElement(), this.initialize.apply(this, arguments), this.delegateEvents()
        },
        v = /^(\S+)\s*(.*)$/,
        w = ["model", "collection", "el", "id", "attributes", "className", "tagName", "events"];
    h.extend(u.prototype, i, {
        tagName: "div",
        $: function (a) {
            return this.$el.find(a)
        },
        initialize: function () {},
        render: function () {
            return this
        },
        remove: function () {
            return this.$el.remove(), this.stopListening(), this
        },
        setElement: function (a, b) {
            return this.$el && this.undelegateEvents(), this.$el = a instanceof g.$ ? a : g.$(a), this.el = this.$el[0], b !== !1 && this.delegateEvents(), this
        },
        delegateEvents: function (a) {
            if (!a && !(a = h.result(this, "events"))) return this;
            this.undelegateEvents();
            for (var b in a) {
                var c = a[b];
                h.isFunction(c) || (c = this[a[b]]);
                if (!c) continue;
                var d = b.match(v),
                    e = d[1],
                    f = d[2];
                c = h.bind(c, this), e += ".delegateEvents" + this.cid, f === "" ? this.$el.on(e, c) : this.$el.on(e, f, c)
            }
            return this
        },
        undelegateEvents: function () {
            return this.$el.off(".delegateEvents" + this.cid), this
        },
        _ensureElement: function () {
            if (!this.el) {
                var a = h.extend({}, h.result(this, "attributes"));
                this.id && (a.id = h.result(this, "id")), this.className && (a["class"] = h.result(this, "className"));
                var b = g.$("<" + h.result(this, "tagName") + ">").attr(a);
                this.setElement(b, !1)
            } else this.setElement(h.result(this, "el"), !1)
        }
    }), g.sync = function (a, b, c) {
        var d = y[a];
        h.defaults(c || (c = {}), {
            emulateHTTP: g.emulateHTTP,
            emulateJSON: g.emulateJSON
        });
        var e = {
            type: d,
            dataType: "json"
        };
        c.url || (e.url = h.result(b, "url") || L()), c.data == null && b && (a === "create" || a === "update" || a === "patch") && (e.contentType = "application/json", e.data = JSON.stringify(c.attrs || b.toJSON(c))), c.emulateJSON && (e.contentType = "application/x-www-form-urlencoded", e.data = e.data ? {
            model: e.data
        } : {});
        if (c.emulateHTTP && (d === "PUT" || d === "DELETE" || d === "PATCH")) {
            e.type = "POST", c.emulateJSON && (e.data._method = d);
            var f = c.beforeSend;
            c.beforeSend = function (a) {
                a.setRequestHeader("X-HTTP-Method-Override", d);
                if (f) return f.apply(this, arguments)
            }
        }
        e.type !== "GET" && !c.emulateJSON && (e.processData = !1), e.type === "PATCH" && x && (e.xhr = function () {
            return new ActiveXObject("Microsoft.XMLHTTP")
        });
        var i = c.xhr = g.ajax(h.extend(e, c));
        return b.trigger("request", b, i, c), i
    };
    var x = typeof window != "undefined" && !! window.ActiveXObject && (!window.XMLHttpRequest || !(new XMLHttpRequest).dispatchEvent),
        y = {
            create: "POST",
            update: "PUT",
            patch: "PATCH",
            "delete": "DELETE",
            read: "GET"
        };
    g.ajax = function () {
        return g.$.ajax.apply(g.$, arguments)
    };
    var z = g.Router = function (a) {
            a || (a = {}), a.routes && (this.routes = a.routes), this._bindRoutes(), this.initialize.apply(this, arguments)
        },
        A = /\((.*?)\)/g,
        B = /(\(\?)?:\w+/g,
        C = /\*\w+/g,
        D = /[\-{}\[\]+?.,\\\^$|#\s]/g;
    h.extend(z.prototype, i, {
        initialize: function () {},
        route: function (a, b, c) {
            h.isRegExp(a) || (a = this._routeToRegExp(a)), h.isFunction(b) && (c = b, b = ""), c || (c = this[b]);
            var d = this;
            return g.history.route(a, function (e) {
                var f = d._extractParameters(a, e);
                c && c.apply(d, f), d.trigger.apply(d, ["route:" + b].concat(f)), d.trigger("route", b, f), g.history.trigger("route", d, b, f)
            }), this
        },
        navigate: function (a, b) {
            return g.history.navigate(a, b), this
        },
        _bindRoutes: function () {
            if (!this.routes) return;
            this.routes = h.result(this, "routes");
            var a, b = h.keys(this.routes);
            while ((a = b.pop()) != null) this.route(a, this.routes[a])
        },
        _routeToRegExp: function (a) {
            return a = a.replace(D, "\\$&").replace(A, "(?:$1)?").replace(B, function (a, b) {
                return b ? a : "([^/]+)"
            }).replace(C, "(.*?)"), new RegExp("^" + a + "$")
        },
        _extractParameters: function (a, b) {
            var c = a.exec(b).slice(1);
            return h.map(c, function (a) {
                return a ? decodeURIComponent(a) : null
            })
        }
    });
    var E = g.History = function () {
            this.handlers = [], h.bindAll(this, "checkUrl"), typeof window != "undefined" && (this.location = window.location, this.history = window.history)
        },
        F = /^[#\/]|\s+$/g,
        G = /^\/+|\/+$/g,
        H = /msie [\w.]+/,
        I = /\/$/,
        J = /[?#].*$/;
    E.started = !1, h.extend(E.prototype, i, {
        interval: 50,
        getHash: function (a) {
            var b = (a || this).location.href.match(/#(.*)$/);
            return b ? b[1] : ""
        },
        getFragment: function (a, b) {
            if (a == null) if (this._hasPushState || !this._wantsHashChange || b) {
                a = this.location.pathname;
                var c = this.root.replace(I, "");
                a.indexOf(c) || (a = a.slice(c.length))
            } else a = this.getHash();
            return a.replace(F, "")
        },
        start: function (a) {
            if (E.started) throw new Error("Backbone.history has already been started");
            E.started = !0, this.options = h.extend({
                root: "/"
            }, this.options, a), this.root = this.options.root, this._wantsHashChange = this.options.hashChange !== !1, this._wantsPushState = !! this.options.pushState, this._hasPushState = !! (this.options.pushState && this.history && this.history.pushState);
            var b = this.getFragment(),
                c = document.documentMode,
                d = H.exec(navigator.userAgent.toLowerCase()) && (!c || c <= 7);
            this.root = ("/" + this.root + "/").replace(G, "/"), d && this._wantsHashChange && (this.iframe = g.$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow, this.navigate(b)), this._hasPushState ? g.$(window).on("popstate", this.checkUrl) : this._wantsHashChange && "onhashchange" in window && !d ? g.$(window).on("hashchange", this.checkUrl) : this._wantsHashChange && (this._checkUrlInterval = setInterval(this.checkUrl, this.interval)), this.fragment = b;
            var e = this.location,
                f = e.pathname.replace(/[^\/]$/, "$&/") === this.root;
            if (this._wantsHashChange && this._wantsPushState) {
                if (!this._hasPushState && !f) return this.fragment = this.getFragment(null, !0), this.location.replace(this.root + this.location.search + "#" + this.fragment), !0;
                this._hasPushState && f && e.hash && (this.fragment = this.getHash().replace(F, ""), this.history.replaceState({}, document.title, this.root + this.fragment + e.search))
            }
            if (!this.options.silent) return this.loadUrl()
        },
        stop: function () {
            g.$(window).off("popstate", this.checkUrl).off("hashchange", this.checkUrl), clearInterval(this._checkUrlInterval), E.started = !1
        },
        route: function (a, b) {
            this.handlers.unshift({
                route: a,
                callback: b
            })
        },
        checkUrl: function (a) {
            var b = this.getFragment();
            b === this.fragment && this.iframe && (b = this.getFragment(this.getHash(this.iframe)));
            if (b === this.fragment) return !1;
            this.iframe && this.navigate(b), this.loadUrl()
        },
        loadUrl: function (a) {
            return a = this.fragment = this.getFragment(a), h.any(this.handlers, function (b) {
                if (b.route.test(a)) return b.callback(a), !0
            })
        },
        navigate: function (a, b) {
            if (!E.started) return !1;
            if (!b || b === !0) b = {
                trigger: !! b
            };
            var c = this.root + (a = this.getFragment(a || ""));
            a = a.replace(J, "");
            if (this.fragment === a) return;
            this.fragment = a, a === "" && c !== "/" && (c = c.slice(0, -1));
            if (this._hasPushState) this.history[b.replace ? "replaceState" : "pushState"]({}, document.title, c);
            else {
                if (!this._wantsHashChange) return this.location.assign(c);
                this._updateHash(this.location, a, b.replace), this.iframe && a !== this.getFragment(this.getHash(this.iframe)) && (b.replace || this.iframe.document.open().close(), this._updateHash(this.iframe.location, a, b.replace))
            }
            if (b.trigger) return this.loadUrl(a)
        },
        _updateHash: function (a, b, c) {
            if (c) {
                var d = a.href.replace(/(javascript:|#).*$/, "");
                a.replace(d + "#" + b)
            } else a.hash = "#" + b
        }
    }), g.history = new E;
    var K = function (a, b) {
            var c = this,
                d;
            a && h.has(a, "constructor") ? d = a.constructor : d = function () {
                return c.apply(this, arguments)
            }, h.extend(d, c, b);
            var e = function () {
                    this.constructor = d
                };
            return e.prototype = c.prototype, d.prototype = new e, a && h.extend(d.prototype, a), d.__super__ = c.prototype, d
        };
    n.extend = p.extend = z.extend = u.extend = E.extend = K;
    var L = function () {
            throw new Error('A "url" property or function must be specified')
        },
        M = function (a, b) {
            var c = b.error;
            b.error = function (d) {
                c && c(a, d, b), a.trigger("error", a, d, b)
            }
        }
}.call(this), define("vendor/backbone", function () {}), define("use!vendor/backbone", ["underscore", "jquery"], function (a, b) {
    return Backbone
}), function () {
    define("compiled/backbone-ext/Backbone.syncWithMultipart", ["use!vendor/backbone", "underscore", "jquery"], function (a, b, c) {
        return a.syncWithoutMultipart = a.sync, a.syncWithMultipart = function (a, d, e) {
            var f, g, h, i, j, k, l, m;
            return k = b.uniqueId("file_upload_iframe_"), g = c("<iframe id='" + k + "' name='" + k + "' ></iframe>").hide(), i = new c.Deferred, j = {
                create: "POST",
                update: "PUT",
                "delete": "DELETE",
                read: "GET"
            }[a], l = function (a, d, e) {
                var f;
                return f = b.map(a, function (a, f) {
                    var g, h;
                    d && (f = "" + d + "[" + (e ? "" : f) + "]");
                    if (b.isElement(a)) return h = c(a), h.after(h.clone(!0)), a;
                    if (!b.isEmpty(a) && (b.isArray(a) || typeof a == "object")) return l(a, f, b.isArray(a));
                    if (!("" + f).match(/^_/) && a != null && typeof a != "object" && typeof a != "function") return g = c("<input/>", {
                        name: f,
                        value: a
                    }), g[0]
                }), b.flatten(f)
            }, f = c("<form enctype='multipart/form-data' target='" + k + "' action='" + ((m = e.url) != null ? m : d.url()) + "' method='POST'>\n</form>").hide(), e.proxyAttachment && f.prepend("<input type='hidden' name='_method' value='" + j + "' />\n<input type='hidden' name='authenticity_token' value='" + ENV.AUTHENTICITY_TOKEN + "' />"), b.each(l(d.toJSON()), function (a) {
                if (!a) return;
                return a.name === "file" ? f.append(a) : f.prepend(a)
            }), c(document.body).prepend(g, f), h = function () {
                var a, b, d, h, j;
                a = (d = g[0].contentDocument || ((h = g[0].contentWindow) != null ? h.document : void 0)) != null ? d.body : void 0, b = c.parseJSON(c(a).text());
                if (!b) return;
                return b = (j = b.objects) != null ? j : b, a.className === "error" ? (typeof e.error == "function" && e.error(b), i.reject(b)) : (typeof e.success == "function" && e.success(b), i.resolve(b)), g.remove(), f.remove()
            }, g[0].onreadystatechange = function () {
                if (this.readyState === "complete") return h()
            }, g[0].onload = h, f[0].submit(), i
        }, a.sync = function (b, c, d) {
            return (d != null ? d.multipart : void 0) ? a.syncWithMultipart.apply(this, arguments) : a.syncWithoutMultipart.apply(this, arguments)
        }
    })
}.call(this), function () {
    var a = [].slice;
    define("compiled/util/mixin", ["underscore"], function (b) {
        var c, d, e, f, g;
        return c = b.extend, d = b.flatten, f = ["attach", "afterRender", "initialize"], e = RegExp("^(?:__(" + f.join("|") + ")__|(" + f.join("|") + "))$"), g = function () {
            var b, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w;
            o = arguments[0], k = 2 <= arguments.length ? a.call(arguments, 1) : [], "function" == typeof o && (o = o.prototype);
            for (p = 0, r = k.length; p < r; p++) {
                g = k[p];
                for (h in g) n = g[h], h === "events" || h === "defaults" || h === "els" ? (m = (u = o.constructor) != null ? u.prototype[h] : void 0, o[h] = c({}, m, o[h], n)) : (i = h.match(e)) ? (v = i.slice(1), b = v[0], l = v[1], (o[t = "__" + (b || l) + "__"] || (o[t] = [])).push(n)) : o[h] = n
            }
            w = function () {
                var a, b, c;
                c = [];
                for (a = 0, b = f.length; a < b; a++) j = f[a], c.push("__" + j + "__");
                return c
            }();
            for (q = 0, s = w.length; q < s; q++) h = w[q], o[h] && (o[h] = d(o[h], !0));
            return o
        }
    })
}.call(this), function () {
    define("compiled/backbone-ext/Model/computedAttributes", ["use!vendor/backbone", "underscore"], function (a, b) {
        return b.extend(a.Model.prototype, {
            initialize: function () {
                if (this.computedAttributes != null) return this._configureComputedAttributes()
            },
            _configureComputedAttributes: function () {
                var a, c = this;
                return a = function (a) {
                    return c.set(a, c[a]())
                }, b.each(this.computedAttributes, function (d) {
                    var e;
                    return typeof d == "string" ? a(d) : (a(d.name), e = b.map(d.deps, function (a) {
                        return "change:" + a
                    }).join(" "), c.bind(e, function () {
                        return a(d.name)
                    }))
                })
            }
        }), a.Model
    })
}.call(this), function () {
    define("compiled/backbone-ext/Model/dateAttributes", ["use!vendor/backbone", "underscore"], function (a, b) {
        var c;
        return c = a.Model.prototype.parse, a.Model.prototype.parse = function () {
            var a;
            return a = c.apply(this, arguments), b.each(this.dateAttributes, function (b) {
                if (a[b]) return a[b] = Date.parse(a[b])
            }), a
        }, a.Model
    })
}.call(this), function () {
    define("compiled/backbone-ext/Model/errors", ["underscore", "use!vendor/backbone"], function (a, b) {
        return a.extend(b.Model.prototype, {
            normalizeErrors: function (b, c) {
                var d, e, f, g, h, i, j, k, l, m;
                h = {}, g = (k = (l = this.errorMap) != null ? l : this.constructor.prototype.errorMap) != null ? k : {}, a.isFunction(g) && (g = g(c));
                if (b) for (d in b) {
                    e = b[d];
                    if (g[d]) for (i = 0, j = e.length; i < j; i++) {
                        f = e[i];
                        if (!g[d][f.type]) continue;
                        (m = h[d]) == null && (h[d] = []), h[d].push(g[d][f.type])
                    }
                }
                return h
            }
        }), b.Model
    })
}.call(this), function () {
    var a = {}.hasOwnProperty,
        b = function (b, c) {
            function e() {
                this.constructor = b
            }
            for (var d in c) a.call(c, d) && (b[d] = c[d]);
            return e.prototype = c.prototype, b.prototype = new e, b.__super__ = c.prototype, b
        },
        c = [].slice;
    define("compiled/backbone-ext/Model", ["compiled/util/mixin", "underscore", "use!vendor/backbone", "compiled/backbone-ext/Model/computedAttributes", "compiled/backbone-ext/Model/dateAttributes", "compiled/backbone-ext/Model/errors"], function (a, d, e) {
        var f;
        return e.Model = function (e) {
            function g() {
                return f = g.__super__.constructor.apply(this, arguments), f
            }
            return b(g, e), g.mixin = function () {
                var b;
                return b = 1 <= arguments.length ? c.call(arguments, 0) : [], a.apply(null, [this].concat(c.call(b)))
            }, g.prototype.initialize = function (a, b) {
                var c, e, f, h;
                g.__super__.initialize.apply(this, arguments), this.options = d.extend({}, this.defaults, b);
                if (this.__initialize__) {
                    h = this.__initialize__;
                    for (e = 0, f = h.length; e < f; e++) c = h[e], c.call(this)
                }
                return this
            }, g.prototype.save = function () {
                return this.trigger("saving"), g.__super__.save.apply(this, arguments)
            }, g.prototype.destroy = function () {
                return this.trigger("destroying"), g.__super__.destroy.apply(this, arguments)
            }, g.prototype.increment = function (a, b) {
                return b == null && (b = 1), this.set(a, this.get(a) + b)
            }, g.prototype.decrement = function (a, b) {
                return b == null && (b = 1), this.increment(a, -b)
            }, g.prototype.deepGet = function (a) {
                var b, c, d;
                c = a.split("."), d = this.get(c.shift());
                while (b = c.shift()) d = d[b];
                return d
            }, g
        }(e.Model)
    })
}.call(this), define("INST", ["jquery"], function (a) {
    typeof INST == "undefined" && (INST = {}), INST.browser = {}, a.each([7, 8, 9], function (b, c) {
        a("html").hasClass("ie" + c) && (INST.browser["ie" + c] = INST.browser.ie = !0, INST.browser.version = c)
    }), window.devicePixelRatio && (INST.browser.webkit = !0, INST.browser[escape(navigator.javaEnabled.toString()) == "function%20javaEnabled%28%29%20%7B%20%5Bnative%20code%5D%20%7D" ? "chrome" : "safari"] = !0), INST.browser.ff = a.browser.mozilla, INST.browser.touch = "ontouchstart" in document, INST.browser["no-touch"] = !INST.browser.touch;
    var b = a.map(INST.browser, function (a, b) {
        if (a === !0) return b
    }).join(" ");
    return a(function () {
        a("body").addClass(b)
    }), INST
}), define("str/htmlEscape", ["INST", "jquery"], function (a, b) {
    var c = b("<div/>"),
        d = function (a) {
            return a && a.htmlSafe ? a.toString() : c.text(a).html()
        },
        e = function (a) {
            if (typeof a == "string") return d(a);
            var b, c;
            for (b in a) c = a[b], typeof c == "string" && (a[b] = d(c));
            return a
        };
    return a.htmlEscape = e, e
}), function () {
    var a = function (a, b) {
            return function () {
                return a.apply(b, arguments)
            }
        },
        b = {}.hasOwnProperty,
        c = function (a, c) {
            function e() {
                this.constructor = a
            }
            for (var d in c) b.call(c, d) && (a[d] = c[d]);
            return e.prototype = c.prototype, a.prototype = new e, a.__super__ = c.prototype, a
        },
        d = [].slice;
    define("compiled/backbone-ext/View", ["use!vendor/backbone", "underscore", "str/htmlEscape", "compiled/util/mixin"], function (b, e, f, g) {
        var h;
        return b.View = function (b) {
            function i() {
                return this.renderView = a(this.renderView, this), this.createBindings = a(this.createBindings, this), this.render = a(this.render, this), h = i.__super__.constructor.apply(this, arguments), h
            }
            return c(i, b), i.prototype.defaults = {}, i.prototype.els = null, i.optionProperty = function (a) {
                return this.__optionProperties__ = (this.__optionProperties__ || []).concat([a])
            }, i.optionProperty("template"), i.child = function (a, b) {
                var c;
                return this.optionProperty(a), (c = this.__childViews__) == null && (this.__childViews__ = []), this.__childViews__ = this.__childViews__.concat([{
                    name: a,
                    selector: b
                }])
            }, i.prototype.initialize = function (a) {
                var b, c, d, f;
                this.options = e.extend({}, this.defaults, a), this.setOptionProperties(), this.storeChildrenViews(), this.$el.data("view", this), this._setViewProperties();
                if (this.__initialize__) {
                    f = this.__initialize__;
                    for (c = 0, d = f.length; c < d; c++) b = f[c], b.call(this)
                }
                return this.attach(), this
            }, i.prototype.storeChildrenViews = function () {
                var a = this;
                if (!this.constructor.__childViews__) return;
                return this.children = e.map(this.constructor.__childViews__, function (b) {
                    return a[b.name]
                })
            }, i.prototype.setOptionProperties = function () {
                var a, b, c, d, e;
                d = this.constructor.__optionProperties__, e = [];
                for (b = 0, c = d.length; b < c; b++) a = d[b], this.options[a] !== void 0 ? e.push(this[a] = this.options[a]) : e.push(void 0);
                return e
            }, i.prototype.render = function () {
                return this.renderEl(), this._afterRender(), this
            }, i.prototype.renderEl = function () {
                if (this.template) return this.$el.html(this.template(this.toJSON()))
            }, i.prototype.cacheEls = function () {
                var a, b, c, d;
                if (this.els) {
                    c = this.els, d = [];
                    for (b in c) a = c[b], d.push(this[a] = this.$(b));
                    return d
                }
            }, i.prototype._afterRender = function () {
                return this.cacheEls(), this.createBindings(), this.options.views && this.renderViews(), this.renderChildViews(), this.afterRender()
            }, i.prototype.afterRender = function () {
                var a, b, c, d, e;
                if (this.__afterRender__) {
                    d = this.__afterRender__, e = [];
                    for (b = 0, c = d.length; b < c; b++) a = d[b], e.push(a.call(this));
                    return e
                }
            }, i.prototype.attach = function () {
                var a, b, c, d, e;
                if (this.__attach__) {
                    d = this.__attach__, e = [];
                    for (b = 0, c = d.length; b < c; b++) a = d[b], e.push(a.call(this));
                    return e
                }
            }, i.prototype.toJSON = function () {
                var a, b;
                return b = this.model || this.collection, a = b ? b.present ? b.present() : b.toJSON() : this.options, a.cid = this.cid, window.ENV != null && (a.ENV = window.ENV), a
            }, i.prototype.renderChildViews = function () {
                var a, b, c, d, e, f, g;
                if (!this.constructor.__childViews__) return;
                f = this.constructor.__childViews__;
                for (d = 0, e = f.length; d < e; d++) {
                    g = f[d], a = g.name, b = g.selector, this[a] == null && typeof console != "undefined" && console !== null && typeof console.warn == "function" && console.warn("I need a child view '" + a + "' but one was not provided");
                    if (!this[a]) continue;
                    c = this.$(b), this[a].setElement(c), this[a].render()
                }
                return null
            }, i.prototype.createBindings = function (a, b) {
                var c = this;
                return this.$("[data-bind]").each(function (a, b) {
                    var d, e;
                    return d = $(b), e = d.data("bind"), c.model.on("change:" + e, function (a, b) {
                        return d.html(c.format(e, b))
                    })
                })
            }, i.prototype.format = function (a, b) {
                return f(b)
            }, i.prototype.stopPropagation = function (a) {
                return a.stopPropagation()
            }, i.mixin = function () {
                var a;
                return a = 1 <= arguments.length ? d.call(arguments, 0) : [], g.apply(null, [this].concat(d.call(a)))
            }, i.prototype.renderViews = function () {
                return typeof console != "undefined" && console !== null && typeof console.warn == "function" && console.warn("the `views` option is deprecated in favor of @child`"), e.each(this.options.views, this.renderView)
            }, i.prototype.renderView = function (a, b) {
                var c, d;
                return c = this.$("#" + b), c.length || (c = this.$("." + b)), a.setElement(c), a.render(), (d = this[b]) != null ? d : this[b] = a
            }, i.prototype.hide = function () {
                return this.$el.hide()
            }, i.prototype.show = function () {
                return this.$el.show()
            }, i.prototype.toggle = function () {
                return this.$el.toggle()
            }, i.prototype._setViewProperties = function () {
                if (this.setViewProperties === !1) return;
                this.model && (this.model.view = this), this.collection && (this.collection.view = this)
            }, i
        }(b.View), b.View
    })
}.call(this), define("str/pluralize", ["jquery"], function (a) {
    var b = ["equipment", "information", "rice", "money", "species", "series", "fish", "sheep", "jeans"],
        c = [
            [/person$/i, "people"],
            [/man$/i, "men"],
            [/child$/i, "children"],
            [/sex$/i, "sexes"],
            [/move$/i, "moves"],
            [/(quiz)$/i, "$1zes"],
            [/^(ox)$/i, "$1en"],
            [/([m|l])ouse$/i, "$1ice"],
            [/(matr|vert|ind)(?:ix|ex)$/i, "$1ices"],
            [/(x|ch|ss|sh)$/i, "$1es"],
            [/([^aeiouy]|qu)y$/i, "$1ies"],
            [/(hive)$/i, "$1s"],
            [/(?:([^f])fe|([lr])f)$/i, "$1$2ves"],
            [/sis$/i, "ses"],
            [/([ti])um$/i, "$1a"],
            [/(buffal|tomat)o$/i, "$1oes"],
            [/(bu)s$/i, "$1ses"],
            [/(alias|status)$/i, "$1es"],
            [/(octop|vir)us$/i, "$1i"],
            [/(ax|test)is$/i, "$1es"],
            [/s$/i, "s"]
        ],
        d = function (d) {
            d = d || "";
            if (a.inArray(d, b) > 0) return d;
            for (var e = 0; e < c.length; e++) {
                var f = c[e];
                if (d.match(f[0])) return d.replace(f[0], f[1])
            }
            return d + "s"
        };
    return d.withCount = function (a, b) {
        return "" + a + " " + (a == 1 ? b : d(b))
    }, d
}), function () {
    define("compiled/str/splitAssetString", ["str/pluralize"], function (a) {
        return function (b) {
            var c;
            if (c = b.match(/(.*)_(\d+)$/)) return [a(c[1]), c[2]]
        }
    })
}.call(this), function () {
    define("compiled/backbone-ext/DefaultUrlMixin", ["compiled/str/splitAssetString"], function (a) {
        return {
            _contextPath: function () {
                var b, c, d, e;
                return b = this.contextAssetString || ENV.context_asset_string, e = a(b), d = e[0], c = e[1], "" + d + "/" + c
            },
            _defaultUrl: function () {
                var a;
                a = this.resourceName || this.model.prototype.resourceName;
                if (!a) throw new Error("Must define a `resourceName` property on collection or model prototype to use defaultUrl");
                return "/api/v1/" + this._contextPath() + "/" + a
            }
        }
    })
}.call(this), function () {
    var a = {}.hasOwnProperty,
        b = function (b, c) {
            function e() {
                this.constructor = b
            }
            for (var d in c) a.call(c, d) && (b[d] = c[d]);
            return e.prototype = c.prototype, b.prototype = new e, b.__super__ = c.prototype, b
        },
        c = [].slice;
    define("compiled/backbone-ext/Collection", ["use!vendor/backbone", "underscore", "compiled/util/mixin", "compiled/backbone-ext/DefaultUrlMixin"], function (a, d, e, f) {
        var g;
        return a.Collection = function (a) {
            function h() {
                return g = h.__super__.constructor.apply(this, arguments), g
            }
            return b(h, a), h.mixin = function () {
                var a;
                return a = 1 <= arguments.length ? c.call(arguments, 0) : [], e.apply(null, [this].concat(c.call(a)))
            }, h.mixin(f), h.prototype.defaults = {
                params: void 0,
                resourceName: void 0,
                contextAssetString: void 0
            }, h.optionProperty = function (a) {
                return this.__optionProperties__ = (this.__optionProperties__ || []).concat([a])
            }, h.prototype.setOptionProperties = function () {
                var a, b, c, d, e;
                d = this.constructor.__optionProperties__, e = [];
                for (b = 0, c = d.length; b < c; b++) a = d[b], this.options[a] !== void 0 ? e.push(this[a] = this.options[a]) : e.push(void 0);
                return e
            }, h.prototype.initialize = function (a, b) {
                return this.options = d.extend({}, this.defaults, b), this.setOptionProperties(), h.__super__.initialize.apply(this, arguments)
            }, h.prototype.setParam = function (a, b) {
                var c, d;
                return (d = (c = this.options).params) == null && (c.params = {}), this.options.params[a] = b, this.trigger("setParam", a, b)
            }, h.prototype.setParams = function (a) {
                var b, c;
                for (b in a) c = a[b], this.setParam(b, c);
                return this.trigger("setParams", a)
            }, h.prototype.deleteParam = function (a) {
                var b;
                return (b = this.options.params) != null && delete b[a], this.trigger("deleteParam", a)
            }, h.prototype.fetch = function (a) {
                var b = this;
                return a == null && (a = {}), a.data == null && this.options.params != null && (a.data = this.options.params), h.__super__.fetch.call(this, a).fail(function (a) {
                    return b.trigger("fetch:fail", a)
                })
            }, h.prototype.url = function () {
                return this._defaultUrl()
            }, h.optionProperty("contextAssetString"), h.optionProperty("resourceName"), h.prototype.parse = function (a, b) {
                var c, e, f, g, i, j;
                return a == null ? h.__super__.parse.apply(this, arguments) : (j = d.pick(a, "meta", "links", "linked"), d.isEmpty(j) ? h.__super__.parse.apply(this, arguments) : (e = d.omit(a, "meta", "links", "linked"), d.isEmpty(e) ? h.__super__.parse.apply(this, arguments) : (c = d.keys(e), i = d.first(c), g = e[i], g == null ? h.__super__.parse.apply(this, arguments) : (c.length > 1 && typeof console != "undefined" && console !== null && typeof console.warn == "function" && console.warn("Found more then one primary collection, using '" + i + "'."), f = {}, d.each(j.linked || {}, function (a, b) {
                    return f[b] = d.indexBy(a, "id")
                }), d.isEmpty(f) ? h.__super__.parse.call(this, g, b) : (d.each(this.sideLoad || {}, function (a, b) {
                    var c, e;
                    d.isBoolean(a) && a && (a = {}), d.isString(a) && (a = {
                        collection: a
                    });
                    if (!d.isObject(a)) return;
                    return e = a.foreignKey, c = a.collection, e == null && (e = "" + b), c == null && (c = "" + b + "s"), c = f[c] || {}, d.each(g, function (a) {
                        var g, h;
                        if (!a.links) return;
                        h = null, g = a.links[e];
                        if (d.isArray(g)) {
                            if (d.isEmpty(c)) {
                                c = f[b] || f[e];
                                if (c == null) throw "Could not find linked collection for '" + b + "' using '" + e + "'."
                            }
                            h = d.map(g, function (a) {
                                return c[a]
                            })
                        } else h = c[g];
                        if (g != null && h != null) {
                            a[b] = h, delete a.links[e];
                            if (d.isEmpty(a.links)) return delete a.links
                        }
                    })
                }), h.__super__.parse.call(this, g, b))))))
            }, h
        }(a.Collection)
    })
}.call(this), define("Backbone", ["use!vendor/backbone", "compiled/backbone-ext/Backbone.syncWithMultipart", "compiled/backbone-ext/Model", "compiled/backbone-ext/View", "compiled/backbone-ext/Collection"], function (a) {
    return a
}), function () {
    define("compiled/util/objectCollection", [], function () {
        return function (a) {
            return a.indexOf = function (b) {
                var c, d, e, f;
                for (c = e = 0, f = a.length; e < f; c = ++e) {
                    d = a[c];
                    if (d === b) return c
                }
            }, -1, a.findBy = function (b, c) {
                var d, e, f, g;
                for (d = f = 0, g = a.length; f < g; d = ++f) {
                    e = a[d];
                    if (e[b] === c) return e
                }
                return !1
            }, a.eraseBy = function (b, c) {
                var d;
                return d = a.findBy(b, c), a.erase(d)
            }, a.insert = function (b, c) {
                return c == null && (c = 0), a.splice(c, 0, b)
            }, a.erase = function (b) {
                var c, d, e, f, g;
                g = [];
                for (c = e = 0, f = a.length; e < f; c = ++e) d = a[c], d === b ? g.push(a.splice(c, 1)) : g.push(void 0);
                return g
            }, a.sortBy = function () {
                var b;
                return b = {
                    string: function (a, b) {
                        return a < b ? -1 : a > b ? 1 : 0
                    },
                    number: function (a, b) {
                        return a - b
                    }
                }, function (c) {
                    var d;
                    return a.length === 0 ? a : (d = typeof a[0][c] || "string", a.sort(function (a, e) {
                        return b[d](a[c], e[c])
                    }))
                }
            }(), a
        }
    })
}.call(this);
var Handlebars = function () {
        var a = function () {
                function b(a) {
                    this.string = a
                }
                var a;
                return b.prototype.toString = function () {
                    return "" + this.string
                }, a = b, a
            }(),
            b = function (a) {
                function g(a) {
                    return d[a] || "&amp;"
                }
                function h(a, b) {
                    for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c])
                }
                function l(a) {
                    return a instanceof c ? a.toString() : !a && a !== 0 ? "" : (a = "" + a, f.test(a) ? a.replace(e, g) : a)
                }
                function m(a) {
                    return !a && a !== 0 ? !0 : k(a) && a.length === 0 ? !0 : !1
                }
                var b = {},
                    c = a,
                    d = {
                        "&": "&amp;",
                        "<": "&lt;",
                        ">": "&gt;",
                        '"': "&quot;",
                        "'": "&#x27;",
                        "`": "&#x60;"
                    },
                    e = /[&<>"'`]/g,
                    f = /[&<>"'`]/;
                b.extend = h;
                var i = Object.prototype.toString;
                b.toString = i;
                var j = function (a) {
                        return typeof a == "function"
                    };
                j(/x/) && (j = function (a) {
                    return typeof a == "function" && i.call(a) === "[object Function]"
                });
                var j;
                b.isFunction = j;
                var k = Array.isArray ||
                function (a) {
                    return a && typeof a == "object" ? i.call(a) === "[object Array]" : !1
                };
                return b.isArray = k, b.escapeExpression = l, b.isEmpty = m, b
            }(a),
            c = function () {
                function c() {
                    var a = Error.prototype.constructor.apply(this, arguments);
                    for (var c = 0; c < b.length; c++) this[b[c]] = a[b[c]]
                }
                var a, b = ["description", "fileName", "lineNumber", "message", "name", "number", "stack"];
                return c.prototype = new Error, a = c, a
            }(),
            d = function (a, b) {
                function m(a, b) {
                    this.helpers = a || {}, this.partials = b || {}, n(this)
                }
                function n(a) {
                    a.registerHelper("helperMissing", function (a) {
                        if (arguments.length === 2) return undefined;
                        throw new Error("Missing helper: '" + a + "'")
                    }), a.registerHelper("blockHelperMissing", function (b, c) {
                        var d = c.inverse ||
                        function () {}, e = c.fn;
                        return j(b) && (b = b.call(this)), b === !0 ? e(this) : b === !1 || b == null ? d(this) : i(b) ? b.length > 0 ? a.helpers.each(b, c) : d(this) : e(b)
                    }), a.registerHelper("each", function (a, b) {
                        var c = b.fn,
                            d = b.inverse,
                            e = 0,
                            f = "",
                            g;
                        j(a) && (a = a.call(this)), b.data && (g = q(b.data));
                        if (a && typeof a == "object") if (i(a)) for (var h = a.length; e < h; e++) g && (g.index = e, g.first = e === 0, g.last = e === a.length - 1), f += c(a[e], {
                            data: g
                        });
                        else for (var k in a) a.hasOwnProperty(k) && (g && (g.key = k), f += c(a[k], {
                            data: g
                        }), e++);
                        return e === 0 && (f = d(this)), f
                    }), a.registerHelper("if", function (a, b) {
                        return j(a) && (a = a.call(this)), !b.hash.includeZero && !a || d.isEmpty(a) ? b.inverse(this) : b.fn(this)
                    }), a.registerHelper("unless", function (b, c) {
                        return a.helpers["if"].call(this, b, {
                            fn: c.inverse,
                            inverse: c.fn,
                            hash: c.hash
                        })
                    }), a.registerHelper("with", function (a, b) {
                        j(a) && (a = a.call(this));
                        if (!d.isEmpty(a)) return b.fn(a)
                    }), a.registerHelper("log", function (b, c) {
                        var d = c.data && c.data.level != null ? parseInt(c.data.level, 10) : 1;
                        a.log(d, b)
                    })
                }
                function p(a, b) {
                    o.log(a, b)
                }
                var c = {},
                    d = a,
                    e = b,
                    f = "1.1.2";
                c.VERSION = f;
                var g = 4;
                c.COMPILER_REVISION = g;
                var h = {
                    1: "<= 1.0.rc.2",
                    2: "== 1.0.0-rc.3",
                    3: "== 1.0.0-rc.4",
                    4: ">= 1.0.0"
                };
                c.REVISION_CHANGES = h;
                var i = d.isArray,
                    j = d.isFunction,
                    k = d.toString,
                    l = "[object Object]";
                c.HandlebarsEnvironment = m, m.prototype = {
                    constructor: m,
                    logger: o,
                    log: p,
                    registerHelper: function (a, b, c) {
                        if (k.call(a) === l) {
                            if (c || b) throw new e("Arg not supported with multiple helpers");
                            d.extend(this.helpers, a)
                        } else c && (b.not = c), this.helpers[a] = b
                    },
                    registerPartial: function (a, b) {
                        k.call(a) === l ? d.extend(this.partials, a) : this.partials[a] = b
                    }
                };
                var o = {
                    methodMap: {
                        0: "debug",
                        1: "info",
                        2: "warn",
                        3: "error"
                    },
                    DEBUG: 0,
                    INFO: 1,
                    WARN: 2,
                    ERROR: 3,
                    level: 3,
                    log: function (a, b) {
                        if (o.level <= a) {
                            var c = o.methodMap[a];
                            typeof console != "undefined" && console[c] && console[c].call(console, b)
                        }
                    }
                };
                c.logger = o, c.log = p;
                var q = function (a) {
                        var b = {};
                        return d.extend(b, a), b
                    };
                return c.createFrame = q, c
            }(b, c),
            e = function (a, b, c) {
                function i(a) {
                    var b = a && a[0] || 1,
                        c = g;
                    if (b !== c) {
                        if (b < c) {
                            var d = h[c],
                                e = h[b];
                            throw new Error("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version (" + d + ") or downgrade your runtime to an older version (" + e + ").")
                        }
                        throw new Error("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version (" + a[1] + ").")
                    }
                }
                function j(a, b) {
                    if (!b) throw new Error("No environment passed to template");
                    var c;
                    b.compile ? c = function (a, c, d, e, f, g) {
                        var h = m.apply(this, arguments);
                        if (h) return h;
                        var i = {
                            helpers: e,
                            partials: f,
                            data: g
                        };
                        return f[c] = b.compile(a, {
                            data: g !== undefined
                        }, b), f[c](d, i)
                    } : c = function (a, b) {
                        var c = m.apply(this, arguments);
                        if (c) return c;
                        throw new f("The partial " + b + " could not be compiled when running in runtime-only mode")
                    };
                    var d = {
                        escapeExpression: e.escapeExpression,
                        invokePartial: c,
                        programs: [],
                        program: function (a, b, c) {
                            var d = this.programs[a];
                            return c ? d = l(a, b, c) : d || (d = this.programs[a] = l(a, b)), d
                        },
                        merge: function (a, b) {
                            var c = a || b;
                            return a && b && a !== b && (c = {}, e.extend(c, b), e.extend(c, a)), c
                        },
                        programWithDepth: k,
                        noop: n,
                        compilerInfo: null
                    };
                    return function (c, e) {
                        e = e || {};
                        var f = e.partial ? e : b,
                            g, h;
                        e.partial || (g = e.helpers, h = e.partials);
                        var j = a.call(d, f, c, g, h, e.data);
                        return e.partial || i(d.compilerInfo), j
                    }
                }
                function k(a, b, c) {
                    var d = Array.prototype.slice.call(arguments, 3),
                        e = function (a, e) {
                            return e = e || {}, b.apply(this, [a, e.data || c].concat(d))
                        };
                    return e.program = a, e.depth = d.length, e
                }
                function l(a, b, c) {
                    var d = function (a, d) {
                            return d = d || {}, b(a, d.data || c)
                        };
                    return d.program = a, d.depth = 0, d
                }
                function m(a, b, c, d, e, g) {
                    var h = {
                        partial: !0,
                        helpers: d,
                        partials: e,
                        data: g
                    };
                    if (a === undefined) throw new f("The partial " + b + " could not be found");
                    if (a instanceof Function) return a(c, h)
                }
                function n() {
                    return ""
                }
                var d = {},
                    e = a,
                    f = b,
                    g = c.COMPILER_REVISION,
                    h = c.REVISION_CHANGES;
                return d.template = j, d.programWithDepth = k, d.program = l, d.invokePartial = m, d.noop = n, d
            }(b, c, d),
            f = function (a, b, c, d, e) {
                var f, g = a,
                    h = b,
                    i = c,
                    j = d,
                    k = e,
                    l = function () {
                        var a = new g.HandlebarsEnvironment;
                        return j.extend(a, g), a.SafeString = h, a.Exception = i, a.Utils = j, a.VM = k, a.template = function (b) {
                            return k.template(b, a)
                        }, a
                    },
                    m = l();
                return m.create = l, f = m, f
            }(d, a, c, b, e);
        return f
    }();
define("bower/handlebars/handlebars.runtime", function () {}), define("use!bower/handlebars/handlebars.runtime", [], function () {
    return window.Handlebars
}), define("handlebars", ["use!bower/handlebars/handlebars.runtime"], function (a) {
    return a
}), define("str/escapeRegex", [], function () {
    return function (a) {
        return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
    }
}), function () {
    define("compiled/str/i18nLolcalize", [], function () {
        var a, b, c;
        return a = {
            0: "toUpperCase",
            1: "toLowerCase"
        }, c = function (b) {
            var c, d, e, f, g;
            return d = /(\s*%h?\{[^\}]+\}\s*|\s*[\n\\`\*_\{\}\[\]\(\)\#\+\-!]+\s*|^\s+)/, e = function () {
                var e, h, j, k, l, m;
                k = b.split(d), m = [];
                for (e = 0, j = k.length; e < j; e++) {
                    g = k[e];
                    if (g.match(d)) m.push(g);
                    else {
                        f = "";
                        for (c = h = 0, l = g.length; 0 <= l ? h < l : h > l; c = 0 <= l ? ++h : --h) f += g[c][a[c % 2]]();
                        f = f.replace(/\.( |$)/, "!!?! "), f = f.replace(/^(\w+)$/, "$1!"), f.length > 2 && (f += " LOL!"), m.push(f)
                    }
                }
                return m
            }(), e.join("")
        }, b = function (a) {
            var b, d, e;
            if (typeof a == "string") return c(a);
            d = {};
            for (b in a) e = a[b], d[b] = c(e);
            return d
        }
    })
}.call(this), define("vendor/date-js/globalization/en-US", [], function () {
    Date.CultureInfo = {
        name: "en-US",
        englishName: "English (United States)",
        nativeName: "English (United States)",
        dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
        abbreviatedDayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
        shortestDayNames: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
        firstLetterDayNames: ["S", "M", "T", "W", "T", "F", "S"],
        monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        abbreviatedMonthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        amDesignator: "AM",
        pmDesignator: "PM",
        firstDayOfWeek: 0,
        twoDigitYearMax: 2029,
        dateElementOrder: "mdy",
        formatPatterns: {
            shortDate: "M/d/yyyy",
            longDate: "dddd, MMMM dd, yyyy",
            shortTime: "h:mm tt",
            longTime: "h:mm:ss tt",
            fullDateTime: "dddd, MMMM dd, yyyy h:mm:ss tt",
            sortableDateTime: "yyyy-MM-ddTHH:mm:ss",
            universalSortableDateTime: "yyyy-MM-dd HH:mm:ssZ",
            rfc1123: "ddd, dd MMM yyyy HH:mm:ss GMT",
            monthDay: "MMMM dd",
            yearMonth: "MMMM, yyyy"
        },
        regexPatterns: {
            jan: /^jan(uary)?/i,
            feb: /^feb(ruary)?/i,
            mar: /^mar(ch)?/i,
            apr: /^apr(il)?/i,
            may: /^may/i,
            jun: /^jun(e)?/i,
            jul: /^jul(y)?/i,
            aug: /^aug(ust)?/i,
            sep: /^sep(t(ember)?)?/i,
            oct: /^oct(ober)?/i,
            nov: /^nov(ember)?/i,
            dec: /^dec(ember)?/i,
            sun: /^su(n(day)?)?/i,
            mon: /^mo(n(day)?)?/i,
            tue: /^tu(e(s(day)?)?)?/i,
            wed: /^we(d(nesday)?)?/i,
            thu: /^th(u(r(s(day)?)?)?)?/i,
            fri: /^fr(i(day)?)?/i,
            sat: /^sa(t(urday)?)?/i,
            future: /^next/i,
            past: /^last|past|prev(ious)?/i,
            add: /^(\+|aft(er)?|from|hence)/i,
            subtract: /^(\-|bef(ore)?|ago)/i,
            yesterday: /^yes(terday)?/i,
            today: /^t(od(ay)?)?/i,
            tomorrow: /^tom(orrow)?/i,
            now: /^n(ow)?/i,
            millisecond: /^ms|milli(second)?s?/i,
            second: /^sec(ond)?s?/i,
            minute: /^mn|min(ute)?s?/i,
            hour: /^h(our)?s?/i,
            week: /^w(eek)?s?/i,
            month: /^m(onth)?s?/i,
            day: /^d(ay)?s?/i,
            year: /^y(ear)?s?/i,
            shortMeridian: /^(a|p)/i,
            longMeridian: /^(a\.?m?\.?|p\.?m?\.?)/i,
            timezone: /^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i,
            ordinalSuffix: /^\s*(st|nd|rd|th)/i,
            timeContext: /^\s*(\:|a(?!u|p)|p)/i
        },
        timezones: [{
            name: "UTC",
            offset: "-000"
        }, {
            name: "GMT",
            offset: "-000"
        }, {
            name: "EST",
            offset: "-0500"
        }, {
            name: "EDT",
            offset: "-0400"
        }, {
            name: "CST",
            offset: "-0600"
        }, {
            name: "CDT",
            offset: "-0500"
        }, {
            name: "MST",
            offset: "-0700"
        }, {
            name: "MDT",
            offset: "-0600"
        }, {
            name: "PST",
            offset: "-0800"
        }, {
            name: "PDT",
            offset: "-0700"
        }]
    }
}), define("vendor/date-js/core", ["vendor/date-js/globalization/en-US"], function () {
    (function () {
        var a = Date,
            b = a.prototype,
            c = a.CultureInfo,
            d = function (a, b) {
                return b || (b = 2), ("000" + a).slice(b * -1)
            };
        b.clearTime = function () {
            return this.setHours(0), this.setMinutes(0), this.setSeconds(0), this.setMilliseconds(0), this
        }, b.setTimeToNow = function () {
            var a = new Date;
            return this.setHours(a.getHours()), this.setMinutes(a.getMinutes()), this.setSeconds(a.getSeconds()), this.setMilliseconds(a.getMilliseconds()), this
        }, a.today = function () {
            return (new Date).clearTime()
        }, a.compare = function (a, b) {
            if (isNaN(a) || isNaN(b)) throw new Error(a + " - " + b);
            if (a instanceof Date && b instanceof Date) return a < b ? -1 : a > b ? 1 : 0;
            throw new TypeError(a + " - " + b)
        }, a.equals = function (a, b) {
            return a.compareTo(b) === 0
        }, a.getDayNumberFromName = function (a) {
            var b = c.dayNames,
                d = c.abbreviatedDayNames,
                e = c.shortestDayNames,
                f = a.toLowerCase();
            for (var g = 0; g < b.length; g++) if (b[g].toLowerCase() == f || d[g].toLowerCase() == f || e[g].toLowerCase() == f) return g;
            return -1
        }, a.getMonthNumberFromName = function (a) {
            var b = c.monthNames,
                d = c.abbreviatedMonthNames,
                e = a.toLowerCase();
            for (var f = 0; f < b.length; f++) if (b[f].toLowerCase() == e || d[f].toLowerCase() == e) return f;
            return -1
        }, a.isLeapYear = function (a) {
            return a % 4 === 0 && a % 100 !== 0 || a % 400 === 0
        }, a.getDaysInMonth = function (b, c) {
            return [31, a.isLeapYear(b) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][c]
        }, a.getTimezoneAbbreviation = function (a) {
            var b = c.timezones,
                d;
            for (var e = 0; e < b.length; e++) if (b[e].offset === a) return b[e].name;
            return null
        }, a.getTimezoneOffset = function (a) {
            var b = c.timezones,
                d;
            for (var e = 0; e < b.length; e++) if (b[e].name === a.toUpperCase()) return b[e].offset;
            return null
        }, b.clone = function () {
            return new Date(this.getTime())
        }, b.compareTo = function (a) {
            return Date.compare(this, a)
        }, b.equals = function (a) {
            return Date.equals(this, a || new Date)
        }, b.between = function (a, b) {
            return this.getTime() >= a.getTime() && this.getTime() <= b.getTime()
        }, b.isAfter = function (a) {
            return this.compareTo(a || new Date) === 1
        }, b.isBefore = function (a) {
            return this.compareTo(a || new Date) === -1
        }, b.isToday = b.isSameDay = function (a) {
            return this.clone().clearTime().equals((a || new Date).clone().clearTime())
        }, b.addMilliseconds = function (a) {
            return this.setUTCMilliseconds(this.getUTCMilliseconds() + a * 1), this
        }, b.addSeconds = function (a) {
            return this.addMilliseconds(a * 1e3)
        }, b.addMinutes = function (a) {
            return this.addMilliseconds(a * 6e4)
        }, b.addHours = function (a) {
            return this.addMilliseconds(a * 36e5)
        }, b.addDays = function (a) {
            return this.setDate(this.getDate() + a * 1), this
        }, b.addWeeks = function (a) {
            return this.addDays(a * 7)
        }, b.addMonths = function (b) {
            var c = this.getDate();
            return this.setDate(1), this.setMonth(this.getMonth() + b * 1), this.setDate(Math.min(c, a.getDaysInMonth(this.getFullYear(), this.getMonth()))), this
        }, b.addYears = function (a) {
            return this.addMonths(a * 12)
        }, b.add = function (a) {
            if (typeof a == "number") return this._orient = a, this;
            var b = a;
            return b.milliseconds && this.addMilliseconds(b.milliseconds), b.seconds && this.addSeconds(b.seconds), b.minutes && this.addMinutes(b.minutes), b.hours && this.addHours(b.hours), b.weeks && this.addWeeks(b.weeks), b.months && this.addMonths(b.months), b.years && this.addYears(b.years), b.days && this.addDays(b.days), this
        };
        var e, f, g;
        b.getWeek = function () {
            var a, b, c, d, h, i, j, k, l, m;
            return e = e ? e : this.getFullYear(), f = f ? f : this.getMonth() + 1, g = g ? g : this.getDate(), f <= 2 ? (a = e - 1, b = (a / 4 | 0) - (a / 100 | 0) + (a / 400 | 0), c = ((a - 1) / 4 | 0) - ((a - 1) / 100 | 0) + ((a - 1) / 400 | 0), l = b - c, h = 0, i = g - 1 + 31 * (f - 1)) : (a = e, b = (a / 4 | 0) - (a / 100 | 0) + (a / 400 | 0), c = ((a - 1) / 4 | 0) - ((a - 1) / 100 | 0) + ((a - 1) / 400 | 0), l = b - c, h = l + 1, i = g + (153 * (f - 3) + 2) / 5 + 58 + l), j = (a + b) % 7, d = (i + j - h) % 7, k = i + 3 - d | 0, k < 0 ? m = 53 - ((j - l) / 5 | 0) : k > 364 + l ? m = 1 : m = (k / 7 | 0) + 1, e = f = g = null, m
        }, b.getISOWeek = function () {
            return e = this.getUTCFullYear(), f = this.getUTCMonth() + 1, g = this.getUTCDate(), d(this.getWeek())
        }, b.setWeek = function (a) {
            return this.moveToDayOfWeek(1).addWeeks(a - this.getWeek())
        };
        var h = function (a, b, c, d) {
                if (typeof a == "undefined") return !1;
                if (typeof a != "number") throw new TypeError(a + " is not a Number.");
                if (a < b || a > c) throw new RangeError(a + " is not a valid value for " + d + ".");
                return !0
            };
        a.validateMillisecond = function (a) {
            return h(a, 0, 999, "millisecond")
        }, a.validateSecond = function (a) {
            return h(a, 0, 59, "second")
        }, a.validateMinute = function (a) {
            return h(a, 0, 59, "minute")
        }, a.validateHour = function (a) {
            return h(a, 0, 23, "hour")
        }, a.validateDay = function (b, c, d) {
            return h(b, 1, a.getDaysInMonth(c, d), "day")
        }, a.validateMonth = function (a) {
            return h(a, 0, 11, "month")
        }, a.validateYear = function (a) {
            return h(a, 0, 9999, "year")
        }, b.set = function (b) {
            return a.validateMillisecond(b.millisecond) && this.setMilliseconds(b.millisecond), a.validateSecond(b.second) && this.setSeconds(b.second), a.validateMinute(b.minute) && this.setMinutes(b.minute), a.validateHour(b.hour) && this.setHours(b.hour), a.validateMonth(b.month) && this.addMonths(b.month - this.getMonth()), a.validateYear(b.year) && this.addYears(b.year - this.getFullYear()), a.validateDay(b.day, this.getFullYear(), this.getMonth()) && this.addDays(b.day - this.getDate()), b.timezone && this.setTimezone(b.timezone), b.timezoneOffset != null && this.setTimezoneOffset(b.timezoneOffset), b.week && h(b.week, 0, 53, "week") && this.setWeek(b.week), this
        }, b.moveToFirstDayOfMonth = function () {
            return this.set({
                day: 1
            })
        }, b.moveToLastDayOfMonth = function () {
            return this.set({
                day: a.getDaysInMonth(this.getFullYear(), this.getMonth())
            })
        }, b.moveToNthOccurrence = function (a, b) {
            var c = 0;
            if (b > 0) c = b - 1;
            else if (b === -1) return this.moveToLastDayOfMonth(), this.getDay() !== a && this.moveToDayOfWeek(a, -1), this;
            return this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(a, 1).addWeeks(c)
        }, b.moveToDayOfWeek = function (a, b) {
            var c = (a - this.getDay() + 7 * (b || 1)) % 7;
            return this.addDays(c === 0 ? c += 7 * (b || 1) : c)
        }, b.moveToMonth = function (a, b) {
            var c = (a - this.getMonth() + 12 * (b || 1)) % 12;
            return this.addMonths(c === 0 ? c += 12 * (b || 1) : c)
        }, b.getOrdinalNumber = function () {
            return Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 864e5) + 1
        }, b.getTimezone = function () {
            return a.getTimezoneAbbreviation(this.getUTCOffset())
        }, b.setTimezoneOffset = function (a) {
            return a = Number(a), a = -(Math.floor(a / 100) * 60 + (a % 100 + 60) % 60), this.addMinutes(a - this.getTimezoneOffset())
        }, b.setTimezone = function (b) {
            return this.setTimezoneOffset(a.getTimezoneOffset(b))
        }, b.hasDaylightSavingTime = function () {
            return Date.today().set({
                month: 0,
                day: 1
            }).getTimezoneOffset() !== Date.today().set({
                month: 6,
                day: 1
            }).getTimezoneOffset()
        }, b.isDaylightSavingTime = function () {
            return Date.today().set({
                month: 0,
                day: 1
            }).getTimezoneOffset() != this.getTimezoneOffset()
        }, b.getUTCOffset = function () {
            var a = this.getTimezoneOffset(),
                b = a % 60,
                c = (a - b) / 60,
                d = -(c * 100 + b),
                e;
            return d < 0 ? (e = (d - 1e4).toString(), e.charAt(0) + e.substr(2)) : (e = (d + 1e4).toString(), "+" + e.substr(1))
        }, b.getElapsed = function (a) {
            return (a || new Date) - this
        }, b.toISOString || (b.toISOString = function () {
            function a(a) {
                return a < 10 ? "0" + a : a
            }
            return '"' + this.getUTCFullYear() + "-" + a(this.getUTCMonth() + 1) + "-" + a(this.getUTCDate()) + "T" + a(this.getUTCHours()) + ":" + a(this.getUTCMinutes()) + ":" + a(this.getUTCSeconds()) + 'Z"'
        }), b._toString = b.toString, b.toString = function (a) {
            var b = this;
            if (a && a.length == 1) {
                var e = c.formatPatterns;
                b.t = b.toString;
                switch (a) {
                case "d":
                    return b.t(e.shortDate);
                case "D":
                    return b.t(e.longDate);
                case "F":
                    return b.t(e.fullDateTime);
                case "m":
                    return b.t(e.monthDay);
                case "r":
                    return b.t(e.rfc1123);
                case "s":
                    return b.t(e.sortableDateTime);
                case "t":
                    return b.t(e.shortTime);
                case "T":
                    return b.t(e.longTime);
                case "u":
                    return b.t(e.universalSortableDateTime);
                case "y":
                    return b.t(e.yearMonth)
                }
            }
            var f = function (a) {
                    switch (a * 1) {
                    case 1:
                    case 21:
                    case 31:
                        return "st";
                    case 2:
                    case 22:
                        return "nd";
                    case 3:
                    case 23:
                        return "rd";
                    default:
                        return "th"
                    }
                };
            return a ? a.replace(/(\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S)/g, function (a) {
                if (a.charAt(0) === "\\") return a.replace("\\", "");
                b.h = b.getHours;
                switch (a) {
                case "hh":
                    return d(b.h() < 13 ? b.h() === 0 ? 12 : b.h() : b.h() - 12);
                case "h":
                    return b.h() < 13 ? b.h() === 0 ? 12 : b.h() : b.h() - 12;
                case "HH":
                    return d(b.h());
                case "H":
                    return b.h();
                case "mm":
                    return d(b.getMinutes());
                case "m":
                    return b.getMinutes();
                case "ss":
                    return d(b.getSeconds());
                case "s":
                    return b.getSeconds();
                case "yyyy":
                    return d(b.getFullYear(), 4);
                case "yy":
                    return d(b.getFullYear());
                case "dddd":
                    return c.dayNames[b.getDay()];
                case "ddd":
                    return c.abbreviatedDayNames[b.getDay()];
                case "dd":
                    return d(b.getDate());
                case "d":
                    return b.getDate();
                case "MMMM":
                    return c.monthNames[b.getMonth()];
                case "MMM":
                    return c.abbreviatedMonthNames[b.getMonth()];
                case "MM":
                    return d(b.getMonth() + 1);
                case "M":
                    return b.getMonth() + 1;
                case "t":
                    return b.h() < 12 ? c.amDesignator.substring(0, 1) : c.pmDesignator.substring(0, 1);
                case "tt":
                    return b.h() < 12 ? c.amDesignator : c.pmDesignator;
                case "S":
                    return f(b.getDate());
                default:
                    return a
                }
            }) : this._toString()
        }
    })()
}), define("vendor/date-js/sugarpak", ["vendor/date-js/core"], function () {
    (function () {
        var a = Date,
            b = a.prototype,
            c = a.CultureInfo,
            d = Number.prototype;
        b._orient = 1, b._nth = null, b._is = !1, b._same = !1, b._isSecond = !1, d._dateElement = "day", b.next = function () {
            return this._orient = 1, this
        }, a.next = function () {
            return a.today().next()
        }, b.last = b.prev = b.previous = function () {
            return this._orient = -1, this
        }, a.last = a.prev = a.previous = function () {
            return a.today().last()
        }, b.is = function () {
            return this._is = !0, this
        }, b.same = function () {
            return this._same = !0, this._isSecond = !1, this
        }, b.today = function () {
            return this.same().day()
        }, b.weekday = function () {
            return this._is ? (this._is = !1, !this.is().sat() && !this.is().sun()) : !1
        }, b.at = function (b) {
            return typeof b == "string" ? a.parse(this.toString("d") + " " + b) : this.set(b)
        }, d.fromNow = d.after = function (a) {
            var b = {};
            return b[this._dateElement] = this, (a ? a.clone() : new Date).add(b)
        }, d.ago = d.before = function (a) {
            var b = {};
            return b[this._dateElement] = this * -1, (a ? a.clone() : new Date).add(b)
        };
        var e = "sunday monday tuesday wednesday thursday friday saturday".split(/\s/),
            f = "january february march april may june july august september october november december".split(/\s/),
            g = "Millisecond Second Minute Hour Day Week Month Year".split(/\s/),
            h = "Milliseconds Seconds Minutes Hours Date Week Month FullYear".split(/\s/),
            i = "final first second third fourth fifth".split(/\s/),
            j;
        b.toObject = function () {
            var a = {};
            for (var b = 0; b < g.length; b++) a[g[b].toLowerCase()] = this["get" + h[b]]();
            return a
        }, a.fromObject = function (a) {
            return a.week = null, Date.today().set(a)
        };
        var k = function (b) {
                return function () {
                    if (this._is) return this._is = !1, this.getDay() == b;
                    if (this._nth !== null) {
                        this._isSecond && this.addSeconds(this._orient * -1), this._isSecond = !1;
                        var c = this._nth;
                        this._nth = null;
                        var d = this.clone().moveToLastDayOfMonth();
                        this.moveToNthOccurrence(b, c);
                        if (this > d) throw new RangeError(a.getDayName(b) + " does not occur " + c + " times in the month of " + a.getMonthName(d.getMonth()) + " " + d.getFullYear() + ".");
                        return this
                    }
                    return this.moveToDayOfWeek(b, this._orient)
                }
            },
            l = function (b) {
                return function () {
                    var d = a.today(),
                        e = b - d.getDay();
                    return b === 0 && c.firstDayOfWeek === 1 && d.getDay() !== 0 && (e += 7), d.addDays(e)
                }
            };
        for (var m = 0; m < e.length; m++) a[e[m].toUpperCase()] = a[e[m].toUpperCase().substring(0, 3)] = m, a[e[m]] = a[e[m].substring(0, 3)] = l(m), b[e[m]] = b[e[m].substring(0, 3)] = k(m);
        var n = function (a) {
                return function () {
                    return this._is ? (this._is = !1, this.getMonth() === a) : this.moveToMonth(a, this._orient)
                }
            },
            o = function (b) {
                return function () {
                    return a.today().set({
                        month: b,
                        day: 1
                    })
                }
            };
        for (var p = 0; p < f.length; p++) a[f[p].toUpperCase()] = a[f[p].toUpperCase().substring(0, 3)] = p, a[f[p]] = a[f[p].substring(0, 3)] = o(p), b[f[p]] = b[f[p].substring(0, 3)] = n(p);
        var q = function (a) {
                return function () {
                    if (this._isSecond) return this._isSecond = !1, this;
                    if (this._same) {
                        this._same = this._is = !1;
                        var b = this.toObject(),
                            c = (arguments[0] || new Date).toObject(),
                            d = "",
                            e = a.toLowerCase();
                        for (var f = g.length - 1; f > -1; f--) {
                            d = g[f].toLowerCase();
                            if (b[d] != c[d]) return !1;
                            if (e == d) break
                        }
                        return !0
                    }
                    return a.substring(a.length - 1) != "s" && (a += "s"), this["add" + a](this._orient)
                }
            },
            r = function (a) {
                return function () {
                    return this._dateElement = a, this
                }
            };
        for (var s = 0; s < g.length; s++) j = g[s].toLowerCase(), b[j] = b[j + "s"] = q(g[s]), d[j] = d[j + "s"] = r(j);
        b._ss = q("Second");
        var t = function (a) {
                return function (b) {
                    return this._same ? this._ss(arguments[0]) : b || b === 0 ? this.moveToNthOccurrence(b, a) : (this._nth = a, a !== 2 || b !== undefined && b !== null ? this : (this._isSecond = !0, this.addSeconds(this._orient)))
                }
            };
        for (var u = 0; u < i.length; u++) b[i[u]] = u === 0 ? t(-1) : t(u)
    })()
}), define("vendor/date-js/parser", ["vendor/date-js/sugarpak"], function () {
    (function () {
        Date.Parsing = {
            Exception: function (a) {
                this.message = "Parse error at '" + a.substring(0, 10) + " ...'"
            }
        };
        var a = Date.Parsing,
            b = a.Operators = {
                rtoken: function (b) {
                    return function (c) {
                        var d = c.match(b);
                        if (d) return [d[0], c.substring(d[0].length)];
                        throw new a.Exception(c)
                    }
                },
                token: function (a) {
                    return function (a) {
                        return b.rtoken(new RegExp("^s*" + a + "s*"))(a)
                    }
                },
                stoken: function (a) {
                    return b.rtoken(new RegExp("^" + a))
                },
                until: function (a) {
                    return function (b) {
                        var c = [],
                            d = null;
                        while (b.length) {
                            try {
                                d = a.call(this, b)
                            } catch (e) {
                                c.push(d[0]), b = d[1];
                                continue
                            }
                            break
                        }
                        return [c, b]
                    }
                },
                many: function (a) {
                    return function (b) {
                        var c = [],
                            d = null;
                        while (b.length) {
                            try {
                                d = a.call(this, b)
                            } catch (e) {
                                return [c, b]
                            }
                            c.push(d[0]), b = d[1]
                        }
                        return [c, b]
                    }
                },
                optional: function (a) {
                    return function (b) {
                        var c = null;
                        try {
                            c = a.call(this, b)
                        } catch (d) {
                            return [null, b]
                        }
                        return [c[0], c[1]]
                    }
                },
                not: function (b) {
                    return function (c) {
                        try {
                            b.call(this, c)
                        } catch (d) {
                            return [null, c]
                        }
                        throw new a.Exception(c)
                    }
                },
                ignore: function (a) {
                    return a ?
                    function (b) {
                        var c = null;
                        return c = a.call(this, b), [null, c[1]]
                    } : null
                },
                product: function () {
                    var a = arguments[0],
                        c = Array.prototype.slice.call(arguments, 1),
                        d = [];
                    for (var e = 0; e < a.length; e++) d.push(b.each(a[e], c));
                    return d
                },
                cache: function (b) {
                    var c = {},
                        d = null;
                    return function (e) {
                        try {
                            d = c[e] = c[e] || b.call(this, e)
                        } catch (f) {
                            d = c[e] = f
                        }
                        if (d instanceof a.Exception) throw d;
                        return d
                    }
                },
                any: function () {
                    var b = arguments;
                    return function (c) {
                        var d = null;
                        for (var e = 0; e < b.length; e++) {
                            if (b[e] == null) continue;
                            try {
                                d = b[e].call(this, c)
                            } catch (f) {
                                d = null
                            }
                            if (d) return d
                        }
                        throw new a.Exception(c)
                    }
                },
                each: function () {
                    var b = arguments;
                    return function (c) {
                        var d = [],
                            e = null;
                        for (var f = 0; f < b.length; f++) {
                            if (b[f] == null) continue;
                            try {
                                e = b[f].call(this, c)
                            } catch (g) {
                                throw new a.Exception(c)
                            }
                            d.push(e[0]), c = e[1]
                        }
                        return [d, c]
                    }
                },
                all: function () {
                    var a = arguments,
                        b = b;
                    return b.each(b.optional(a))
                },
                sequence: function (c, d, e) {
                    return d = d || b.rtoken(/^\s*/), e = e || null, c.length == 1 ? c[0] : function (b) {
                        var f = null,
                            g = null,
                            h = [];
                        for (var i = 0; i < c.length; i++) {
                            try {
                                f = c[i].call(this, b)
                            } catch (j) {
                                break
                            }
                            h.push(f[0]);
                            try {
                                g = d.call(this, f[1])
                            } catch (k) {
                                g = null;
                                break
                            }
                            b = g[1]
                        }
                        if (!f) throw new a.Exception(b);
                        if (g) throw new a.Exception(g[1]);
                        if (e) try {
                            f = e.call(this, f[1])
                        } catch (l) {
                            throw new a.Exception(f[1])
                        }
                        return [h, f ? f[1] : b]
                    }
                },
                between: function (a, c, d) {
                    d = d || a;
                    var e = b.each(b.ignore(a), c, b.ignore(d));
                    return function (a) {
                        var b = e.call(this, a);
                        return [[b[0][0], r[0][2]], b[1]]
                    }
                },
                list: function (a, c, d) {
                    return c = c || b.rtoken(/^\s*/), d = d || null, a instanceof Array ? b.each(b.product(a.slice(0, -1), b.ignore(c)), a.slice(-1), b.ignore(d)) : b.each(b.many(b.each(a, b.ignore(c))), px, b.ignore(d))
                },
                set: function (c, d, e) {
                    return d = d || b.rtoken(/^\s*/), e = e || null, function (f) {
                        var g = null,
                            h = null,
                            i = null,
                            j = null,
                            k = [
                                [], f],
                            l = !1;
                        for (var m = 0; m < c.length; m++) {
                            i = null, h = null, g = null, l = c.length == 1;
                            try {
                                g = c[m].call(this, f)
                            } catch (n) {
                                continue
                            }
                            j = [
                                [g[0]], g[1]
                            ];
                            if (g[1].length > 0 && !l) try {
                                i = d.call(this, g[1])
                            } catch (o) {
                                l = !0
                            } else l = !0;
                            !l && i[1].length === 0 && (l = !0);
                            if (!l) {
                                var p = [];
                                for (var q = 0; q < c.length; q++) m != q && p.push(c[q]);
                                h = b.set(p, d).call(this, i[1]), h[0].length > 0 && (j[0] = j[0].concat(h[0]), j[1] = h[1])
                            }
                            j[1].length < k[1].length && (k = j);
                            if (k[1].length === 0) break
                        }
                        if (k[0].length === 0) return k;
                        if (e) {
                            try {
                                i = e.call(this, k[1])
                            } catch (r) {
                                throw new a.Exception(k[1])
                            }
                            k[1] = i[1]
                        }
                        return k
                    }
                },
                forward: function (a, b) {
                    return function (c) {
                        return a[b].call(this, c)
                    }
                },
                replace: function (a, b) {
                    return function (c) {
                        var d = a.call(this, c);
                        return [b, d[1]]
                    }
                },
                process: function (a, b) {
                    return function (c) {
                        var d = a.call(this, c);
                        return [b.call(this, d[0]), d[1]]
                    }
                },
                min: function (b, c) {
                    return function (d) {
                        var e = c.call(this, d);
                        if (e[0].length < b) throw new a.Exception(d);
                        return e
                    }
                }
            },
            c = function (a) {
                return function () {
                    var b = null,
                        c = [];
                    arguments.length > 1 ? b = Array.prototype.slice.call(arguments) : arguments[0] instanceof Array && (b = arguments[0]);
                    if (!b) return a.apply(null, arguments);
                    for (var d = 0, e = b.shift(); d < e.length; d++) return b.unshift(e[d]), c.push(a.apply(null, b)), b.shift(), c
                }
            },
            d = "optional not ignore cache".split(/\s/);
        for (var e = 0; e < d.length; e++) b[d[e]] = c(b[d[e]]);
        var f = function (a) {
                return function () {
                    return arguments[0] instanceof Array ? a.apply(null, arguments[0]) : a.apply(null, arguments)
                }
            },
            g = "each any all".split(/\s/);
        for (var h = 0; h < g.length; h++) b[g[h]] = f(b[g[h]])
    })(), function () {
        var a = Date,
            b = a.prototype,
            c = a.CultureInfo,
            d = function (a) {
                var b = [];
                for (var c = 0; c < a.length; c++) a[c] instanceof Array ? b = b.concat(d(a[c])) : a[c] && b.push(a[c]);
                return b
            };
        a.Grammar = {}, a.Translator = {
            hour: function (a) {
                return function () {
                    this.hour = Number(a)
                }
            },
            minute: function (a) {
                return function () {
                    this.minute = Number(a)
                }
            },
            second: function (a) {
                return function () {
                    this.second = Number(a)
                }
            },
            meridian: function (a) {
                return function () {
                    this.meridian = a.slice(0, 1).toLowerCase()
                }
            },
            timezone: function (a) {
                return function () {
                    var b = a.replace(/[^\d\+\-]/g, "");
                    b.length ? this.timezoneOffset = Number(b) : a == "Z" ? this.timezoneOffset = 0 : this.timezone = a.toLowerCase()
                }
            },
            day: function (a) {
                var b = a[0];
                return function () {
                    this.day = Number(b.match(/\d+/)[0])
                }
            },
            month: function (a) {
                return function () {
                    this.month = a.length == 3 ? "jan feb mar apr may jun jul aug sep oct nov dec".indexOf(a) / 4 : Number(a) - 1
                }
            },
            year: function (a) {
                return function () {
                    var b = Number(a);
                    this.year = a.length > 2 ? b : b + (b + 2e3 < c.twoDigitYearMax ? 2e3 : 1900)
                }
            },
            rday: function (a) {
                return function () {
                    switch (a) {
                    case "yesterday":
                        this.days = -1;
                        break;
                    case "tomorrow":
                        this.days = 1;
                        break;
                    case "today":
                        this.days = 0;
                        break;
                    case "now":
                        this.days = 0, this.now = !0
                    }
                }
            },
            finishExact: function (b) {
                b = b instanceof Array ? b : [b];
                for (var c = 0; c < b.length; c++) b[c] && b[c].call(this);
                var d = new Date;
                (this.hour || this.minute) && !this.month && !this.year && !this.day && (this.day = d.getDate()), this.year || (this.year = d.getFullYear()), !this.month && this.month !== 0 && (this.month = d.getMonth()), this.day || (this.day = 1), this.hour || (this.hour = 0), this.minute || (this.minute = 0), this.second || (this.second = 0), this.meridian && this.hour && (this.meridian == "p" && this.hour < 12 ? this.hour = this.hour + 12 : this.meridian == "a" && this.hour == 12 && (this.hour = 0));
                if (this.day > a.getDaysInMonth(this.year, this.month)) throw new RangeError(this.day + " is not a valid value for days.");
                var e = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second);
                return this.timezone ? e.set({
                    timezone: this.timezone
                }) : this.timezoneOffset != null && e.set({
                    timezoneOffset: this.timezoneOffset
                }), e
            },
            finish: function (b) {
                b = b instanceof Array ? d(b) : [b];
                if (b.length === 0) return null;
                for (var c = 0; c < b.length; c++) typeof b[c] == "function" && b[c].call(this);
                var e = a.today();
                if (this.now && !this.unit && !this.operator) return new Date;
                this.now && (e = new Date);
                var f = !! (this.days && this.days !== null || this.orient || this.operator),
                    g, h, i;
                i = this.orient == "past" || this.operator == "subtract" ? -1 : 1, !this.now && "hour minute second".indexOf(this.unit) != -1 && e.setTimeToNow(), (this.month || this.month === 0) && "year day hour minute second".indexOf(this.unit) != -1 && (this.value = this.month + 1, this.month = null, f = !0);
                if (!f && this.weekday && !this.day && !this.days) {
                    var j = Date[this.weekday]();
                    this.day = j.getDate(), this.month || (this.month = j.getMonth()), this.year = j.getFullYear()
                }
                f && this.weekday && this.unit != "month" && (this.unit = "day", g = a.getDayNumberFromName(this.weekday) - e.getDay(), h = 7, this.days = g ? (g + i * h) % h : i * h), this.month && this.unit == "day" && this.operator && (this.value = this.month + 1, this.month = null), this.value != null && this.month != null && this.year != null && (this.day = this.value * 1), this.month && !this.day && this.value && (e.set({
                    day: this.value * 1
                }), f || (this.day = this.value * 1)), !this.month && this.value && this.unit == "month" && !this.now && (this.month = this.value, f = !0), f && (this.month || this.month === 0) && this.unit != "year" && (this.unit = "month", g = this.month - e.getMonth(), h = 12, this.months = g ? (g + i * h) % h : i * h, this.month = null), this.unit || (this.unit = "day");
                if (!this.value && this.operator && this.operator !== null && this[this.unit + "s"] && this[this.unit + "s"] !== null) this[this.unit + "s"] = this[this.unit + "s"] + (this.operator == "add" ? 1 : -1) + (this.value || 0) * i;
                else if (this[this.unit + "s"] == null || this.operator != null) this.value || (this.value = 1), this[this.unit + "s"] = this.value * i;
                this.meridian && this.hour && (this.meridian == "p" && this.hour < 12 ? this.hour = this.hour + 12 : this.meridian == "a" && this.hour == 12 && (this.hour = 0));
                if (this.weekday && !this.day && !this.days) {
                    var j = Date[this.weekday]();
                    this.day = j.getDate(), j.getMonth() !== e.getMonth() && (this.month = j.getMonth())
                }
                return (this.month || this.month === 0) && !this.day && (this.day = 1), !this.orient && !this.operator && this.unit == "week" && this.value && !this.day && !this.month ? Date.today().setWeek(this.value) : (f && this.timezone && this.day && this.days && (this.day = this.days), f ? e.add(this) : e.set(this))
            }
        };
        var e = a.Parsing.Operators,
            f = a.Grammar,
            g = a.Translator,
            h;
        f.datePartDelimiter = e.rtoken(/^([\s\-\.\,\/\x27]+)/), f.timePartDelimiter = e.stoken(":"), f.whiteSpace = e.rtoken(/^\s*/), f.generalDelimiter = e.rtoken(/^(([\s\,]|at|@|on)+)/);
        var i = {};
        f.ctoken = function (a) {
            var b = i[a];
            if (!b) {
                var d = c.regexPatterns,
                    f = a.split(/\s+/),
                    g = [];
                for (var h = 0; h < f.length; h++) g.push(e.replace(e.rtoken(d[f[h]]), f[h]));
                b = i[a] = e.any.apply(null, g)
            }
            return b
        }, f.ctoken2 = function (a) {
            return e.rtoken(c.regexPatterns[a])
        }, f.h = e.cache(e.process(e.rtoken(/^(0[0-9]|1[0-2]|[1-9])/), g.hour)), f.hh = e.cache(e.process(e.rtoken(/^(0[0-9]|1[0-2])/), g.hour)), f.H = e.cache(e.process(e.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/), g.hour)), f.HH = e.cache(e.process(e.rtoken(/^([0-1][0-9]|2[0-3])/), g.hour)), f.m = e.cache(e.process(e.rtoken(/^([0-5][0-9]|[0-9])/), g.minute)), f.mm = e.cache(e.process(e.rtoken(/^[0-5][0-9]/), g.minute)), f.s = e.cache(e.process(e.rtoken(/^([0-5][0-9]|[0-9])/), g.second)), f.ss = e.cache(e.process(e.rtoken(/^[0-5][0-9]/), g.second)), f.hms = e.cache(e.sequence([f.H, f.m, f.s], f.timePartDelimiter)), f.t = e.cache(e.process(f.ctoken2("shortMeridian"), g.meridian)), f.tt = e.cache(e.process(f.ctoken2("longMeridian"), g.meridian)), f.z = e.cache(e.process(e.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/), g.timezone)), f.zz = e.cache(e.process(e.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/), g.timezone)), f.zzz = e.cache(e.process(f.ctoken2("timezone"), g.timezone)), f.Z = e.cache(e.process(e.stoken("Z"), g.timezone)), f.timeSuffix = e.each(e.ignore(f.whiteSpace), e.set([f.tt, f.zzz])), f.time = e.each(e.optional(e.ignore(e.stoken("T"))), f.hms, f.timeSuffix), f.d = e.cache(e.process(e.each(e.rtoken(/^([0-2]\d|3[0-1]|\d)/), e.optional(f.ctoken2("ordinalSuffix"))), g.day)), f.dd = e.cache(e.process(e.each(e.rtoken(/^([0-2]\d|3[0-1])/), e.optional(f.ctoken2("ordinalSuffix"))), g.day)), f.ddd = f.dddd = e.cache(e.process(f.ctoken("sun mon tue wed thu fri sat"), function (a) {
            return function () {
                this.weekday = a
            }
        })), f.M = e.cache(e.process(e.rtoken(/^(1[0-2]|0\d|\d)/), g.month)), f.MM = e.cache(e.process(e.rtoken(/^(1[0-2]|0\d)/), g.month)), f.MMM = f.MMMM = e.cache(e.process(f.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"), g.month)), f.y = e.cache(e.process(e.rtoken(/^(\d\d?)/), g.year)), f.yy = e.cache(e.process(e.rtoken(/^(\d\d)/), g.year)), f.yyy = e.cache(e.process(e.rtoken(/^(\d\d?\d?\d?)/), g.year)), f.yyyy = e.cache(e.process(e.rtoken(/^(\d\d\d\d)/), g.year)), h = function () {
            return e.each(e.any.apply(null, arguments), e.not(f.ctoken2("timeContext")))
        }, f.day = h(f.d, f.dd), f.month = h(f.M, f.MMM), f.year = h(f.yyyy, f.yy), f.orientation = e.process(f.ctoken("past future"), function (a) {
            return function () {
                this.orient = a
            }
        }), f.operator = e.process(f.ctoken("add subtract"), function (a) {
            return function () {
                this.operator = a
            }
        }), f.rday = e.process(f.ctoken("yesterday tomorrow today now"), g.rday), f.unit = e.process(f.ctoken("second minute hour day week month year"), function (a) {
            return function () {
                this.unit = a
            }
        }), f.value = e.process(e.rtoken(/^\d\d?(st|nd|rd|th)?/), function (a) {
            return function () {
                this.value = a.replace(/\D/g, "")
            }
        }), f.expression = e.set([f.rday, f.operator, f.value, f.unit, f.orientation, f.ddd, f.MMM]), h = function () {
            return e.set(arguments, f.datePartDelimiter)
        }, f.mdy = h(f.ddd, f.month, f.day, f.year), f.ymd = h(f.ddd, f.year, f.month, f.day), f.dmy = h(f.ddd, f.day, f.month, f.year), f.date = function (a) {
            return (f[c.dateElementOrder] || f.mdy).call(this, a)
        }, f.format = e.process(e.many(e.any(e.process(e.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?|Z)/), function (b) {
            if (f[b]) return f[b];
            throw a.Parsing.Exception(b)
        }), e.process(e.rtoken(/^[^dMyhHmstzZ]+/), function (a) {
            return e.ignore(e.stoken(a))
        }))), function (a) {
            return e.process(e.each.apply(null, a), g.finishExact)
        });
        var j = {},
            k = function (a) {
                return j[a] = j[a] || f.format(a)[0]
            };
        f.formats = function (a) {
            if (a instanceof Array) {
                var b = [];
                for (var c = 0; c < a.length; c++) b.push(k(a[c]));
                return e.any.apply(null, b)
            }
            return k(a)
        }, f._formats = f.formats(['"yyyy-MM-ddTHH:mm:ssZ"', "yyyy-MM-ddTHH:mm:ssZ", "yyyy-MM-ddTHH:mm:ssz", "yyyy-MM-ddTHH:mm:ss", "yyyy-MM-ddTHH:mmZ", "yyyy-MM-ddTHH:mmz", "yyyy-MM-ddTHH:mm", "ddd, MMM dd, yyyy H:mm:ss tt", "ddd MMM d yyyy HH:mm:ss zzz", "MMddyyyy", "ddMMyyyy", "Mddyyyy", "ddMyyyy", "Mdyyyy", "dMyyyy", "yyyy", "Mdyy", "dMyy", "d"]), f._start = e.process(e.set([f.date, f.time, f.expression], f.generalDelimiter, f.whiteSpace), g.finish), f.start = function (a) {
            try {
                var b = f._formats.call({}, a);
                if (b[1].length === 0) return b
            } catch (c) {}
            return f._start.call({}, a)
        }, a._parse = a.parse, a.parse = function (b) {
            var c = null;
            if (!b) return null;
            if (b instanceof Date) return b;
            try {
                c = a.Grammar.start.call({}, b.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"))
            } catch (d) {
                return null
            }
            return c[1].length === 0 ? c[0] : null
        }, a.getParseFunction = function (b) {
            var c = a.Grammar.formats(b);
            return function (a) {
                var b = null;
                try {
                    b = c.call({}, a)
                } catch (d) {
                    return null
                }
                return b[1].length === 0 ? b[0] : null
            }
        }, a.parseExact = function (b, c) {
            return a.getParseFunction(c)(b)
        }
    }()
}), define("vendor/date", ["vendor/date-js/parser"], function () {}), define("i18nObj", ["jquery", "str/htmlEscape", "str/pluralize", "str/escapeRegex", "compiled/str/i18nLolcalize", "vendor/date"], function (a, b, c, d, e) {
    var f = window.I18n = {};
    f.defaultLocale = "en", f.defaultSeparator = ".", f.locale = document.documentElement.getAttribute("lang"), f.PLACEHOLDER = /%h?\{(.*?)\}/gm, f.isValidNode = function (a, b) {
        var c = b.split(".");
        for (var d = 0; d < c.length; d++) {
            a = a[c[d]];
            if (typeof a == "undefined" || a === null) return !1
        }
        return !0
    }, f.lookup = function (a, b) {
        var c = this.prepareOptions(f.translations),
            d = c[f.currentLocale()];
        b = this.prepareOptions(b), typeof a == "object" && (a = a.join(this.defaultSeparator)), b.scope && (a = b.scope.toString() + this.defaultSeparator + a), a = a.split(this.defaultSeparator);
        while (d && a.length > 0) {
            var e = a.shift();
            d = d[e]
        }
        return !d && this.isValidNode(b, "defaultValue") && (d = b.defaultValue), d
    }, f.prepareOptions = function () {
        var a = {},
            b, c = arguments.length;
        for (var d = 0; d < c; d++) {
            b = arguments[d];
            if (!b) continue;
            for (var e in b) this.isValidNode(a, e) || (a[e] = b[e])
        }
        return a
    }, f.interpolate = function (a, c) {
        var d, e, f, g, h = !1,
            i;
        c = this.prepareOptions(c), c.wrapper && (h = !0, a = this.applyWrappers(a, c.wrapper)), c.needsEscaping && (h = !0), g = a.match(this.PLACEHOLDER) || [];
        for (var j = 0; d = g[j]; j++) {
            f = d.replace(this.PLACEHOLDER, "$1"), i = d[1] === "h";
            var k = f.split(".");
            e = c;
            for (var l = 0; l < k.length; l++) e = e[k[l]];
            this.isValidNode(c, f) || (e = "[missing " + d + " value]");
            if (h)!e.htmlSafe && !i && (e = b(e));
            else if (e.htmlSafe || i) h = !0, a = b(a);
            regex = new RegExp(d.replace(/\{/gm, "\\{").replace(/\}/gm, "\\}")), a = a.replace(regex, e)
        }
        return a
    }, f.wrapperRegexes = {}, f.applyWrappers = function (a, c) {
        var e = [],
            f;
        a = b(a), typeof c == "string" && (c = {
            "*": c
        });
        for (f in c) e.push(f);
        e.sort().reverse();
        for (var g = 0, h = e.length; g < h; g++) {
            f = e[g];
            if (!this.wrapperRegexes[f]) {
                var i = d(f);
                this.wrapperRegexes[f] = new RegExp(i + "([^" + i + "]*)" + i, "g")
            }
            a = a.replace(this.wrapperRegexes[f], c[f])
        }
        return a
    }, f.translate = function (a, b) {
        b = this.prepareOptions(b);
        var c = this.lookup(a, b);
        try {
            return typeof c == "object" ? typeof b.count == "number" ? this.pluralize(b.count, a, b) : c : this.interpolate(c, b)
        } catch (d) {
            return this.missingTranslation(a)
        }
    }, f.localize = function (a, b) {
        switch (a) {
        case "currency":
            return this.toCurrency(b);
        case "number":
            return a = this.lookup("number.format"), this.toNumber(b, a);
        case "percentage":
            return this.toPercentage(b);
        default:
            return a.match(/^(date|time)/) ? this.toTime(a, b).replace(/\s{2,}/, " ") : b.toString()
        }
    }, f.parseDate = function (a) {
        var b, c;
        b = a.toString().match(/(\d{4})-(\d{2})-(\d{2})(?:[ |T](\d{2}):(\d{2}):(\d{2}))?(Z)?/);
        if (b) {
            for (var d = 1; d <= 6; d++) b[d] = parseInt(b[d], 10) || 0;
            b[2] -= 1, b[7] ? c = new Date(Date.UTC(b[1], b[2], b[3], b[4], b[5], b[6])) : c = new Date(b[1], b[2], b[3], b[4], b[5], b[6])
        } else typeof a == "number" ? (c = new Date, c.setTime(a)) : (c = new Date, c.setTime(Date.parse(a)));
        return c
    }, f.toTime = function (a, b) {
        var c = this.parseDate(b),
            d = this.lookup(a);
        return c.toString().match(/invalid/i) ? c.toString() : d ? this.strftime(c, d) : c.toString()
    }, f.strftime = function (a, b) {
        var c = this.lookup("date");
        c && (c.meridian = c.meridian || ["AM", "PM"]);
        var d = a.getDay(),
            e = a.getDate(),
            f = a.getFullYear(),
            g = a.getMonth() + 1,
            h = 1 + Math.round((new Date(f, g - 1, e) - new Date(f, 0, 1)) / 864e5),
            i = a.getHours(),
            j = i,
            k = i > 11 ? 1 : 0,
            l = a.getSeconds(),
            m = a.getMilliseconds(),
            n = a.getMinutes(),
            o = a.getTimezoneOffset(),
            p = Math.floor(a.getTime() / 1e3),
            q = Math.floor(Math.abs(o / 60)),
            r = Math.abs(o) - q * 60,
            s = (o > 0 ? "-" : "+") + (q.toString().length < 2 ? "0" + q : q) + (r.toString().length < 2 ? "0" + r : r);
        j > 12 ? j -= 12 : j === 0 && (j = 12);
        var t = function (a, b, c) {
                typeof b == "undefined" && (b = "00"), typeof c == "undefined" && (c = 2);
                var d = b + a.toString();
                return d.substr(d.length - c)
            },
            u = !1,
            v = b.replace(/%([DFrRTv])/g, function (a, b) {
                return {
                    D: "%m/%d/%y",
                    F: "%Y-%m-%d",
                    r: "%I:%M:%S %p",
                    R: "%H:%M",
                    T: "%H:%M:%S",
                    v: "%e-%b-%Y"
                }[b]
            }).replace(/%(%|\-?[a-zA-Z]|3N)/g, function (a, b) {
                switch (b) {
                case "a":
                case "A":
                case "b":
                case "B":
                case "h":
                case "p":
                case "P":
                    if (c == null) return u = !0, ""
                }
                switch (b) {
                case "a":
                    return c.abbr_day_names[d];
                case "A":
                    return c.day_names[d];
                case "b":
                    return c.abbr_month_names[g];
                case "B":
                    return c.month_names[g];
                case "d":
                    return t(e);
                case "-d":
                    return e;
                case "e":
                    return t(e, " ");
                case "h":
                    return c.abbr_month_names[g];
                case "H":
                    return t(i);
                case "-H":
                    return i;
                case "I":
                    return t(j);
                case "-I":
                    return j;
                case "j":
                    return t(h, "00", 3);
                case "k":
                    return t(i, " ");
                case "l":
                    return t(j, " ");
                case "L":
                    return t(m, "00", 3);
                case "m":
                    return t(g);
                case "-m":
                    return g;
                case "M":
                    return t(n);
                case "-M":
                    return n;
                case "n":
                    return "\n";
                case "3N":
                    return t(m, "00", 3);
                case "p":
                    return c.meridian[k];
                case "P":
                    return c.meridian[k].toLowerCase();
                case "s":
                    return p;
                case "S":
                    return t(l);
                case "-S":
                    return l;
                case "t":
                    return "	";
                case "u":
                    return d || d + 7;
                case "w":
                    return d;
                case "y":
                    return t(f);
                case "-y":
                    return t(f).replace(/^0+/, "");
                case "Y":
                    return f;
                case "z":
                    return s;
                case "%":
                    return "%";
                default:
                    return a
                }
            });
        return u ? a.toString() : v
    }, f.toNumber = function (a, b) {
        b = this.prepareOptions(b, this.lookup("number.format"), {
            precision: 3,
            separator: ".",
            delimiter: ",",
            strip_insignificant_zeros: !1
        });
        var c = a < 0,
            d = Math.abs(a).toFixed(b.precision).toString(),
            e = d.split(".");
        a = e[0];
        var f = e[1],
            g = [];
        while (a.length > 0) g.unshift(a.substr(Math.max(0, a.length - 3), 3)), a = a.substr(0, a.length - 3);
        var h = g.join(b.delimiter);
        b.precision > 0 && (h += b.separator + e[1]), c && (h = "-" + h);
        if (b.strip_insignificant_zeros) {
            var i = {
                separator: new RegExp(b.separator.replace(/\./, "\\.") + "$"),
                zeros: /0+$/
            };
            h = h.replace(i.zeros, "").replace(i.separator, "")
        }
        return h
    }, f.toCurrency = function (a, b) {
        return b = this.prepareOptions(b, this.lookup("number.currency.format"), this.lookup("number.format"), {
            unit: "$",
            precision: 2,
            format: "%u%n",
            delimiter: ",",
            separator: "."
        }), a = this.toNumber(a, b), a = b.format.replace("%u", b.unit).replace("%n", a), a
    }, f.toHumanSize = function (a, b) {
        var c = 1024,
            d = a,
            e = 0,
            f, g;
        while (d >= c && e < 4) d /= c, e += 1;
        return e === 0 ? (f = this.t("number.human.storage_units.units.byte", {
            count: d
        }), g = 0) : (f = this.t("number.human.storage_units.units." + [null, "kb", "mb", "gb", "tb"][e]), g = d - Math.floor(d) === 0 ? 0 : 1), b = this.prepareOptions(b, {
            precision: g,
            format: "%n%u",
            delimiter: ""
        }), a = this.toNumber(d, b), a = b.format.replace("%u", f).replace("%n", a), a
    }, f.toPercentage = function (a, b) {
        return b = this.prepareOptions(b, this.lookup("number.percentage.format"), this.lookup("number.format"), {
            precision: 3,
            separator: ".",
            delimiter: ""
        }), a = this.toNumber(a, b), a + "%"
    }, f.pluralize = function (a, b, c) {
        var d;
        try {
            d = this.lookup(b, c)
        } catch (e) {}
        if (!d) return this.missingTranslation(b);
        var f;
        c = this.prepareOptions(c), c.count = a.toString();
        switch (Math.abs(a)) {
        case 0:
            f = this.isValidNode(d, "zero") ? d.zero : this.isValidNode(d, "none") ? d.none : this.isValidNode(d, "other") ? d.other : this.missingTranslation(b, "zero");
            break;
        case 1:
            f = this.isValidNode(d, "one") ? d.one : this.missingTranslation(b, "one");
            break;
        default:
            f = this.isValidNode(d, "other") ? d.other : this.missingTranslation(b, "other")
        }
        return this.interpolate(f, c)
    }, f.missingTranslation = function () {
        var a = '[missing "' + this.currentLocale(),
            b = arguments.length;
        for (var c = 0; c < b; c++) a += "." + arguments[c];
        return a += '" translation]', a
    }, f.currentLocale = function () {
        return f.locale || f.defaultLocale
    }, f.t = f.translate, f.l = f.localize, f.p = f.pluralize;
    var g = function (a) {
            return a
        };
    return window.ENV && window.ENV.lolcalize && (g = e), f.scoped = function (a, b) {
        var c = new f.scope(a);
        return b && b(c), c
    }, f.scope = function (a) {
        this.scope = a
    }, f.scope.prototype = {
        resolveScope: function (a) {
            return typeof a == "object" && (a = a.join(f.defaultSeparator)), a[0] == "#" ? a.replace(/^#/, "") : this.scope + f.defaultSeparator + a
        },
        translate: function (a, b, d) {
            return d = d || {}, typeof d.count != "undefined" && typeof b == "string" && b.match(/^[\w\-]+$/) && (b = c.withCount(d.count, b)), d.defaultValue = g(b), f.translate(this.resolveScope(a), d)
        },
        localize: function (a, b) {
            return f.localize(this.resolveScope(a), b)
        },
        pluralize: function (a, b, c) {
            return f.pluralize(a, this.resolveScope(b), c)
        },
        beforeLabel: function (a, b) {
            return typeof b != "undefined" && (a = this.t("labels." + a, b)), this.t("#before_label_wrapper", "%{text}:", {
                text: a
            })
        },
        toTime: function (a, b) {
            return f.toTime(a, b)
        },
        toNumber: function (a, b) {
            return f.toNumber(a, b)
        },
        toCurrency: function (a, b) {
            return f.toCurrency(a, b)
        },
        toHumanSize: function (a, b) {
            return f.toHumanSize(a, b)
        },
        toPercentage: function (a, b) {
            return f.toPercentage(a, b)
        },
        lookup: function (a, b) {
            return f.lookup(this.resolveScope(a), b)
        }
    }, f.scope.prototype.t = f.scope.prototype.translate, f.scope.prototype.l = f.scope.prototype.localize, f.scope.prototype.p = f.scope.prototype.pluralize, f.translations ? a.extend(!0, f.translations, {
        en: {}
    }) : f.translations = {
        en: {}
    }, f
}), function () {
    define("compiled/util/mimeClass", [], function () {
        var a;
        return a = function (b) {
            return a.mimeClasses[b] || "file"
        }, a.mimeClasses = {
            "video/mp4": "video",
            "application/x-rar-compressed": "zip",
            "application/vnd.oasis.opendocument.spreadsheet": "xls",
            "application/x-docx": "doc",
            "application/x-shockwave-flash": "flash",
            "audio/x-mpegurl": "audio",
            "image/png": "image",
            "text/xml": "code",
            "video/x-ms-asf": "video",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "xls",
            "text/html": "html",
            "video/x-msvideo": "video",
            "audio/x-pn-realaudio": "audio",
            "application/x-zip-compressed": "zip",
            "text/css": "code",
            "video/x-sgi-movie": "video",
            "audio/x-aiff": "audio",
            "application/zip": "zip",
            "application/xml": "code",
            "application/x-zip": "zip",
            "text/rtf": "doc",
            text: "text",
            "video/mpeg": "video",
            "video/quicktime": "video",
            "audio/3gpp": "audio",
            "audio/mid": "audio",
            "application/x-rar": "zip",
            "image/x-psd": "image",
            "application/vnd.ms-excel": "xls",
            "application/msword": "doc",
            "video/x-la-asf": "video",
            "image/gif": "image",
            "application/rtf": "doc",
            "video/3gpp": "video",
            "image/pjpeg": "image",
            "image/jpeg": "image",
            "application/vnd.oasis.opendocument.text": "doc",
            "audio/x-wav": "audio",
            "audio/basic": "audio",
            "audio/mpeg": "audio",
            "application/vnd.openxmlformats-officedocument.presentationml.presentation": "ppt",
            "application/vnd.ms-powerpoint": "ppt",
            "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "doc",
            "application/pdf": "pdf",
            "text/plain": "text",
            "text/x-csharp": "code"
        }, a
    })
}.call(this), function () {
    define("compiled/str/convertApiUserContent", ["jquery", "underscore"], function (a, b) {
        var c;
        return c = function (c, d) {
            var e;
            return d == null && (d = {}), e = a("<div />").html(c), e.find("video.instructure_inline_media_comment,audio.instructure_inline_media_comment").replaceWith(function () {
                var b;
                return b = a("<a id='media_comment_" + a(this).data("media_comment_id") + "'            data-media_comment_type='" + a(this).data("media_comment_type") + "'            class='instructure_inline_media_comment " + this.nodeName.toLowerCase() + "_comment' />"), b.html(a(this).html()), b
            }), e.find("object.instructure_user_content embed").remove(), d.forEditing || e.find("object.instructure_user_content,embed.instructure_user_content").replaceWith(function () {
                var c, d, e, f;
                return d = a(this), !d.data("uc_snippet") || !d.data("uc_sig") ? this : (f = b.uniqueId("uc_"), e = "/object_snippet", ENV.files_domain && (e = "//" + ENV.files_domain + e), c = a("<form action='" + e + "' method='post' class='user_content_post_form' target='" + f + "' id='form-" + f + "' />"), c.append(a("<input type='hidden'/>").attr({
                    name: "object_data",
                    value: d.data("uc_snippet")
                })), c.append(a("<input type='hidden'/>").attr({
                    name: "s",
                    value: d.data("uc_sig")
                })), a("body").append(c), setTimeout(function () {
                    return c.submit()
                }, 0), a("<iframe class='user_content_iframe' name='" + f + "' style='width: " + d.data("uc_width") + "; height: " + d.data("uc_height") + ";' frameborder='0' />"))
            }), e.html()
        }
    })
}.call(this), define("jqueryui/datepicker", ["jquery"], function ($) {
    function Datepicker() {
        this.debug = !1, this._curInst = null, this._keyEvent = !1, this._disabledInputs = [], this._datepickerShowing = !1, this._inDialog = !1, this._mainDivId = "ui-datepicker-div", this._inlineClass = "ui-datepicker-inline", this._appendClass = "ui-datepicker-append", this._triggerClass = "ui-datepicker-trigger", this._dialogClass = "ui-datepicker-dialog", this._disableClass = "ui-datepicker-disabled", this._unselectableClass = "ui-datepicker-unselectable", this._currentClass = "ui-datepicker-current-day", this._dayOverClass = "ui-datepicker-days-cell-over", this.regional = [], this.regional[""] = {
            closeText: "Done",
            prevText: "Prev",
            nextText: "Next",
            currentText: "Today",
            monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
            dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
            dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
            weekHeader: "Wk",
            dateFormat: "mm/dd/yy",
            firstDay: 0,
            isRTL: !1,
            showMonthAfterYear: !1,
            yearSuffix: ""
        }, this._defaults = {
            showOn: "focus",
            showAnim: "fadeIn",
            showOptions: {},
            defaultDate: null,
            appendText: "",
            buttonText: "...",
            buttonImage: "",
            buttonImageOnly: !1,
            hideIfNoPrevNext: !1,
            navigationAsDateFormat: !1,
            gotoCurrent: !1,
            changeMonth: !1,
            changeYear: !1,
            yearRange: "c-10:c+10",
            showOtherMonths: !1,
            selectOtherMonths: !1,
            showWeek: !1,
            calculateWeek: this.iso8601Week,
            shortYearCutoff: "+10",
            minDate: null,
            maxDate: null,
            duration: "fast",
            beforeShowDay: null,
            beforeShow: null,
            onSelect: null,
            onChangeMonthYear: null,
            onClose: null,
            numberOfMonths: 1,
            showCurrentAtPos: 0,
            stepMonths: 1,
            stepBigMonths: 12,
            altField: "",
            altFormat: "",
            constrainInput: !0,
            showButtonPanel: !1,
            autoSize: !1,
            disabled: !1
        }, $.extend(this._defaults, this.regional[""]), this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))
    }
    function bindHover(a) {
        var b = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
        return a.delegate(b, "mouseout", function () {
            $(this).removeClass("ui-state-hover"), this.className.indexOf("ui-datepicker-prev") != -1 && $(this).removeClass("ui-datepicker-prev-hover"), this.className.indexOf("ui-datepicker-next") != -1 && $(this).removeClass("ui-datepicker-next-hover")
        }).delegate(b, "mouseover", function () {
            $.datepicker._isDisabledDatepicker(instActive.inline ? a.parent()[0] : instActive.input[0]) || ($(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), $(this).addClass("ui-state-hover"), this.className.indexOf("ui-datepicker-prev") != -1 && $(this).addClass("ui-datepicker-prev-hover"), this.className.indexOf("ui-datepicker-next") != -1 && $(this).addClass("ui-datepicker-next-hover"))
        })
    }
    function extendRemove(a, b) {
        $.extend(a, b);
        for (var c in b) if (b[c] == null || b[c] == undefined) a[c] = b[c];
        return a
    }
    $.extend($.ui, {
        datepicker: {
            version: "@VERSION"
        }
    });
    var PROP_NAME = "datepicker",
        dpuuid = (new Date).getTime(),
        instActive;
    $.extend(Datepicker.prototype, {
        markerClassName: "hasDatepicker",
        maxRows: 4,
        log: function () {
            this.debug && console.log.apply("", arguments)
        },
        _widgetDatepicker: function () {
            return this.dpDiv
        },
        setDefaults: function (a) {
            return extendRemove(this._defaults, a || {}), this
        },
        _attachDatepicker: function (target, settings) {
            var inlineSettings = null;
            for (var attrName in this._defaults) {
                var attrValue = target.getAttribute("date:" + attrName);
                if (attrValue) {
                    inlineSettings = inlineSettings || {};
                    try {
                        inlineSettings[attrName] = eval(attrValue)
                    } catch (err) {
                        inlineSettings[attrName] = attrValue
                    }
                }
            }
            var nodeName = target.nodeName.toLowerCase(),
                inline = nodeName == "div" || nodeName == "span";
            target.id || (this.uuid += 1, target.id = "dp" + this.uuid);
            var inst = this._newInst($(target), inline);
            inst.settings = $.extend({}, settings || {}, inlineSettings || {}), nodeName == "input" ? this._connectDatepicker(target, inst) : inline && this._inlineDatepicker(target, inst)
        },
        _newInst: function (a, b) {
            var c = a[0].id.replace(/([^A-Za-z0-9_-])/g, "\\\\$1");
            return {
                id: c,
                input: a,
                selectedDay: 0,
                selectedMonth: 0,
                selectedYear: 0,
                drawMonth: 0,
                drawYear: 0,
                inline: b,
                dpDiv: b ? bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')) : this.dpDiv
            }
        },
        _connectDatepicker: function (a, b) {
            var c = $(a);
            b.append = $([]), b.trigger = $([]);
            if (c.hasClass(this.markerClassName)) return;
            this._attachments(c, b), c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", function (a, c, d) {
                b.settings[c] = d
            }).bind("getData.datepicker", function (a, c) {
                return this._get(b, c)
            }), this._autoSize(b), $.data(a, PROP_NAME, b), b.settings.disabled && this._disableDatepicker(a)
        },
        _attachments: function (a, b) {
            var c = this._get(b, "appendText"),
                d = this._get(b, "isRTL");
            b.append && b.append.remove(), c && (b.append = $('<span class="' + this._appendClass + '">' + c + "</span>"), a[d ? "before" : "after"](b.append)), a.unbind("focus", this._showDatepicker), b.trigger && b.trigger.remove();
            var e = this._get(b, "showOn");
            (e == "focus" || e == "both") && a.focus(this._showDatepicker);
            if (e == "button" || e == "both") {
                var f = this._get(b, "buttonText"),
                    g = this._get(b, "buttonImage");
                b.trigger = $(this._get(b, "buttonImageOnly") ? $("<img/>").addClass(this._triggerClass).attr({
                    src: g,
                    alt: f,
                    title: f
                }) : $('<button type="button"></button>').addClass(this._triggerClass).html(g == "" ? f : $("<img/>").attr({
                    src: g,
                    alt: f,
                    title: f
                }))), a[d ? "before" : "after"](b.trigger), b.trigger.click(function () {
                    return $.datepicker._datepickerShowing && $.datepicker._lastInput == a[0] ? $.datepicker._hideDatepicker() : $.datepicker._datepickerShowing && $.datepicker._lastInput != a[0] ? ($.datepicker._hideDatepicker(), $.datepicker._showDatepicker(a[0])) : $.datepicker._showDatepicker(a[0]), !1
                })
            }
        },
        _autoSize: function (a) {
            if (this._get(a, "autoSize") && !a.inline) {
                var b = new Date(2009, 11, 20),
                    c = this._get(a, "dateFormat");
                if (c.match(/[DM]/)) {
                    var d = function (a) {
                            var b = 0,
                                c = 0;
                            for (var d = 0; d < a.length; d++) a[d].length > b && (b = a[d].length, c = d);
                            return c
                        };
                    b.setMonth(d(this._get(a, c.match(/MM/) ? "monthNames" : "monthNamesShort"))), b.setDate(d(this._get(a, c.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - b.getDay())
                }
                a.input.attr("size", this._formatDate(a, b).length)
            }
        },
        _inlineDatepicker: function (a, b) {
            var c = $(a);
            if (c.hasClass(this.markerClassName)) return;
            c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker", function (a, c, d) {
                b.settings[c] = d
            }).bind("getData.datepicker", function (a, c) {
                return this._get(b, c)
            }), $.data(a, PROP_NAME, b), this._setDate(b, this._getDefaultDate(b), !0), this._updateDatepicker(b), this._updateAlternate(b), b.settings.disabled && this._disableDatepicker(a), b.dpDiv.css("display", "block")
        },
        _dialogDatepicker: function (a, b, c, d, e) {
            var f = this._dialogInst;
            if (!f) {
                this.uuid += 1;
                var g = "dp" + this.uuid;
                this._dialogInput = $('<input type="text" id="' + g + '" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'), this._dialogInput.keydown(this._doKeyDown), $("body").append(this._dialogInput), f = this._dialogInst = this._newInst(this._dialogInput, !1), f.settings = {}, $.data(this._dialogInput[0], PROP_NAME, f)
            }
            extendRemove(f.settings, d || {}), b = b && b.constructor == Date ? this._formatDate(f, b) : b, this._dialogInput.val(b), this._pos = e ? e.length ? e : [e.pageX, e.pageY] : null;
            if (!this._pos) {
                var h = document.documentElement.clientWidth,
                    i = document.documentElement.clientHeight,
                    j = document.documentElement.scrollLeft || document.body.scrollLeft,
                    k = document.documentElement.scrollTop || document.body.scrollTop;
                this._pos = [h / 2 - 100 + j, i / 2 - 150 + k]
            }
            return this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"), f.settings.onSelect = c, this._inDialog = !0, this.dpDiv.addClass(this._dialogClass), this._showDatepicker(this._dialogInput[0]), $.blockUI && $.blockUI(this.dpDiv), $.data(this._dialogInput[0], PROP_NAME, f), this
        },
        _destroyDatepicker: function (a) {
            var b = $(a),
                c = $.data(a, PROP_NAME);
            if (!b.hasClass(this.markerClassName)) return;
            var d = a.nodeName.toLowerCase();
            $.removeData(a, PROP_NAME), d == "input" ? (c.append.remove(), c.trigger.remove(), b.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown", this._doKeyDown).unbind("keypress", this._doKeyPress).unbind("keyup", this._doKeyUp)) : (d == "div" || d == "span") && b.removeClass(this.markerClassName).empty()
        },
        _enableDatepicker: function (a) {
            var b = $(a),
                c = $.data(a, PROP_NAME);
            if (!b.hasClass(this.markerClassName)) return;
            var d = a.nodeName.toLowerCase();
            if (d == "input") a.disabled = !1, c.trigger.filter("button").each(function () {
                this.disabled = !1
            }).end().filter("img").css({
                opacity: "1.0",
                cursor: ""
            });
            else if (d == "div" || d == "span") {
                var e = b.children("." + this._inlineClass);
                e.children().removeClass("ui-state-disabled"), e.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)
            }
            this._disabledInputs = $.map(this._disabledInputs, function (b) {
                return b == a ? null : b
            })
        },
        _disableDatepicker: function (a) {
            var b = $(a),
                c = $.data(a, PROP_NAME);
            if (!b.hasClass(this.markerClassName)) return;
            var d = a.nodeName.toLowerCase();
            if (d == "input") a.disabled = !0, c.trigger.filter("button").each(function () {
                this.disabled = !0
            }).end().filter("img").css({
                opacity: "0.5",
                cursor: "default"
            });
            else if (d == "div" || d == "span") {
                var e = b.children("." + this._inlineClass);
                e.children().addClass("ui-state-disabled"), e.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)
            }
            this._disabledInputs = $.map(this._disabledInputs, function (b) {
                return b == a ? null : b
            }), this._disabledInputs[this._disabledInputs.length] = a
        },
        _isDisabledDatepicker: function (a) {
            if (!a) return !1;
            for (var b = 0; b < this._disabledInputs.length; b++) if (this._disabledInputs[b] == a) return !0;
            return !1
        },
        _getInst: function (a) {
            try {
                return $.data(a, PROP_NAME)
            } catch (b) {
                throw "Missing instance data for this datepicker"
            }
        },
        _optionDatepicker: function (a, b, c) {
            var d = this._getInst(a);
            if (arguments.length == 2 && typeof b == "string") return b == "defaults" ? $.extend({}, $.datepicker._defaults) : d ? b == "all" ? $.extend({}, d.settings) : this._get(d, b) : null;
            var e = b || {};
            typeof b == "string" && (e = {}, e[b] = c);
            if (d) {
                this._curInst == d && this._hideDatepicker();
                var f = this._getDateDatepicker(a, !0),
                    g = this._getMinMaxDate(d, "min"),
                    h = this._getMinMaxDate(d, "max");
                extendRemove(d.settings, e), g !== null && e.dateFormat !== undefined && e.minDate === undefined && (d.settings.minDate = this._formatDate(d, g)), h !== null && e.dateFormat !== undefined && e.maxDate === undefined && (d.settings.maxDate = this._formatDate(d, h)), this._attachments($(a), d), this._autoSize(d), this._setDate(d, f), this._updateAlternate(d), this._updateDatepicker(d)
            }
        },
        _changeDatepicker: function (a, b, c) {
            this._optionDatepicker(a, b, c)
        },
        _refreshDatepicker: function (a) {
            var b = this._getInst(a);
            b && this._updateDatepicker(b)
        },
        _setDateDatepicker: function (a, b) {
            var c = this._getInst(a);
            c && (this._setDate(c, b), this._updateDatepicker(c), this._updateAlternate(c))
        },
        _getDateDatepicker: function (a, b) {
            var c = this._getInst(a);
            return c && !c.inline && this._setDateFromField(c, b), c ? this._getDate(c) : null
        },
        _doKeyDown: function (a) {
            var b = $.datepicker._getInst(a.target),
                c = !0,
                d = b.dpDiv.is(".ui-datepicker-rtl");
            b._keyEvent = !0;
            if ($.datepicker._datepickerShowing) switch (a.keyCode) {
            case 9:
                $.datepicker._hideDatepicker(), c = !1;
                break;
            case 13:
                var e = $("td." + $.datepicker._dayOverClass + ":not(." + $.datepicker._currentClass + ")", b.dpDiv);
                e[0] && $.datepicker._selectDay(a.target, b.selectedMonth, b.selectedYear, e[0]);
                var f = $.datepicker._get(b, "onSelect");
                if (f) {
                    var g = $.datepicker._formatDate(b);
                    f.apply(b.input ? b.input[0] : null, [g, b])
                } else $.datepicker._hideDatepicker();
                return !1;
            case 27:
                $.datepicker._hideDatepicker();
                break;
            case 33:
                $.datepicker._adjustDate(a.target, a.ctrlKey ? -$.datepicker._get(b, "stepBigMonths") : -$.datepicker._get(b, "stepMonths"), "M");
                break;
            case 34:
                $.datepicker._adjustDate(a.target, a.ctrlKey ? +$.datepicker._get(b, "stepBigMonths") : +$.datepicker._get(b, "stepMonths"), "M");
                break;
            case 35:
                (a.ctrlKey || a.metaKey) && $.datepicker._clearDate(a.target), c = a.ctrlKey || a.metaKey;
                break;
            case 36:
                (a.ctrlKey || a.metaKey) && $.datepicker._gotoToday(a.target), c = a.ctrlKey || a.metaKey;
                break;
            case 37:
                (a.ctrlKey || a.metaKey) && $.datepicker._adjustDate(a.target, d ? 1 : -1, "D"), c = a.ctrlKey || a.metaKey, a.originalEvent.altKey && $.datepicker._adjustDate(a.target, a.ctrlKey ? -$.datepicker._get(b, "stepBigMonths") : -$.datepicker._get(b, "stepMonths"), "M");
                break;
            case 38:
                (a.ctrlKey || a.metaKey) && $.datepicker._adjustDate(a.target, -7, "D"), c = a.ctrlKey || a.metaKey;
                break;
            case 39:
                (a.ctrlKey || a.metaKey) && $.datepicker._adjustDate(a.target, d ? -1 : 1, "D"), c = a.ctrlKey || a.metaKey, a.originalEvent.altKey && $.datepicker._adjustDate(a.target, a.ctrlKey ? +$.datepicker._get(b, "stepBigMonths") : +$.datepicker._get(b, "stepMonths"), "M");
                break;
            case 40:
                (a.ctrlKey || a.metaKey) && $.datepicker._adjustDate(a.target, 7, "D"), c = a.ctrlKey || a.metaKey;
                break;
            default:
                c = !1
            } else a.keyCode == 36 && a.ctrlKey ? $.datepicker._showDatepicker(this) : c = !1;
            c && (a.preventDefault(), a.stopPropagation())
        },
        _doKeyPress: function (a) {
            var b = $.datepicker._getInst(a.target);
            if ($.datepicker._get(b, "constrainInput")) {
                var c = $.datepicker._possibleChars($.datepicker._get(b, "dateFormat")),
                    d = String.fromCharCode(a.charCode == undefined ? a.keyCode : a.charCode);
                return a.ctrlKey || a.metaKey || d < " " || !c || c.indexOf(d) > -1
            }
        },
        _doKeyUp: function (a) {
            var b = $.datepicker._getInst(a.target);
            if (b.input.val() != b.lastVal) try {
                var c = $.datepicker.parseDate($.datepicker._get(b, "dateFormat"), b.input ? b.input.val() : null, $.datepicker._getFormatConfig(b));
                c && ($.datepicker._setDateFromField(b), $.datepicker._updateAlternate(b), $.datepicker._updateDatepicker(b))
            } catch (d) {
                $.datepicker.log(d)
            }
            return !0
        },
        _showDatepicker: function (a) {
            a = a.target || a, a.nodeName.toLowerCase() != "input" && (a = $("input", a.parentNode)[0]);
            if ($.datepicker._isDisabledDatepicker(a) || $.datepicker._lastInput == a) return;
            var b = $.datepicker._getInst(a);
            $.datepicker._curInst && $.datepicker._curInst != b && ($.datepicker._curInst.dpDiv.stop(!0, !0), b && $.datepicker._datepickerShowing && $.datepicker._hideDatepicker($.datepicker._curInst.input[0]));
            var c = $.datepicker._get(b, "beforeShow"),
                d = c ? c.apply(a, [a, b]) : {};
            if (d === !1) return;
            extendRemove(b.settings, d), b.lastVal = null, $.datepicker._lastInput = a, $.datepicker._setDateFromField(b), $.datepicker._inDialog && (a.value = ""), $.datepicker._pos || ($.datepicker._pos = $.datepicker._findPos(a), $.datepicker._pos[1] += a.offsetHeight);
            var e = !1;
            $(a).parents().each(function () {
                return e |= $(this).css("position") == "fixed", !e
            });
            var f = {
                left: $.datepicker._pos[0],
                top: $.datepicker._pos[1]
            };
            $.datepicker._pos = null, b.dpDiv.empty(), b.dpDiv.css({
                position: "absolute",
                display: "block",
                top: "-1000px"
            }), $.datepicker._updateDatepicker(b), f = $.datepicker._checkOffset(b, f, e), b.dpDiv.css({
                position: $.datepicker._inDialog && $.blockUI ? "static" : e ? "fixed" : "absolute",
                display: "none",
                left: f.left + "px",
                top: f.top + "px"
            });
            if (!b.inline) {
                var g = $.datepicker._get(b, "showAnim"),
                    h = $.datepicker._get(b, "duration"),
                    i = function () {
                        var a = b.dpDiv.find("iframe.ui-datepicker-cover");
                        if ( !! a.length) {
                            var c = $.datepicker._getBorders(b.dpDiv);
                            a.css({
                                left: -c[0],
                                top: -c[1],
                                width: b.dpDiv.outerWidth(),
                                height: b.dpDiv.outerHeight()
                            })
                        }
                    };
                b.dpDiv.zIndex($(a).zIndex() + 1), $.datepicker._datepickerShowing = !0, $.effects && ($.effects.effect[g] || $.effects[g]) ? b.dpDiv.show(g, $.datepicker._get(b, "showOptions"), h, i) : b.dpDiv[g || "show"](g ? h : null, i), (!g || !h) && i(), b.input.is(":visible") && !b.input.is(":disabled") && b.input.focus(), $.datepicker._curInst = b
            }
        },
        _updateDatepicker: function (a) {
            this.maxRows = 4;
            var b = $.datepicker._getBorders(a.dpDiv);
            instActive = a, a.dpDiv.empty().append(this._generateHTML(a)), this._attachHandlers(a);
            var c = a.dpDiv.find("iframe.ui-datepicker-cover");
            !c.length || c.css({
                left: -b[0],
                top: -b[1],
                width: a.dpDiv.outerWidth(),
                height: a.dpDiv.outerHeight()
            }), a.dpDiv.find("." + this._dayOverClass + " a").mouseover();
            var d = this._getNumberOfMonths(a),
                e = d[1],
                f = 17;
            a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""), e > 1 && a.dpDiv.addClass("ui-datepicker-multi-" + e).css("width", f * e + "em"), a.dpDiv[(d[0] != 1 || d[1] != 1 ? "add" : "remove") + "Class"]("ui-datepicker-multi"), a.dpDiv[(this._get(a, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"), a == $.datepicker._curInst && $.datepicker._datepickerShowing && a.input && a.input.is(":visible") && !a.input.is(":disabled") && a.input[0] != document.activeElement && a.input.focus();
            if (a.yearshtml) {
                var g = a.yearshtml;
                setTimeout(function () {
                    g === a.yearshtml && a.yearshtml && a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml), g = a.yearshtml = null
                }, 0)
            }
        },
        _getBorders: function (a) {
            var b = function (a) {
                    return {
                        thin: 1,
                        medium: 2,
                        thick: 3
                    }[a] || a
                };
            return [parseFloat(b(a.css("border-left-width"))), parseFloat(b(a.css("border-top-width")))]
        },
        _checkOffset: function (a, b, c) {
            var d = a.dpDiv.outerWidth(),
                e = a.dpDiv.outerHeight(),
                f = a.input ? a.input.outerWidth() : 0,
                g = a.input ? a.input.outerHeight() : 0,
                h = document.documentElement.clientWidth + $(document).scrollLeft(),
                i = document.documentElement.clientHeight + $(document).scrollTop();
            return b.left -= this._get(a, "isRTL") ? d - f : 0, b.left -= c && b.left == a.input.offset().left ? $(document).scrollLeft() : 0, b.top -= c && b.top == a.input.offset().top + g ? $(document).scrollTop() : 0, b.left -= Math.min(b.left, b.left + d > h && h > d ? Math.abs(b.left + d - h) : 0), b.top -= Math.min(b.top, b.top + e > i && i > e ? Math.abs(e + g) : 0), b
        },
        _findPos: function (a) {
            var b = this._getInst(a),
                c = this._get(b, "isRTL");
            while (a && (a.type == "hidden" || a.nodeType != 1 || $.expr.filters.hidden(a))) a = a[c ? "previousSibling" : "nextSibling"];
            var d = $(a).offset();
            return [d.left, d.top]
        },
        _hideDatepicker: function (a) {
            var b = this._curInst;
            if (!b || a && b != $.data(a, PROP_NAME)) return;
            if (this._datepickerShowing) {
                var c = this._get(b, "showAnim"),
                    d = this._get(b, "duration"),
                    e = function () {
                        $.datepicker._tidyDialog(b)
                    };
                $.effects && ($.effects.effect[c] || $.effects[c]) ? b.dpDiv.hide(c, $.datepicker._get(b, "showOptions"), d, e) : b.dpDiv[c == "slideDown" ? "slideUp" : c == "fadeIn" ? "fadeOut" : "hide"](c ? d : null, e), c || e(), this._datepickerShowing = !1;
                var f = this._get(b, "onClose");
                f && f.apply(b.input ? b.input[0] : null, [b.input ? b.input.val() : "", b]), this._lastInput = null, this._inDialog && (this._dialogInput.css({
                    position: "absolute",
                    left: "0",
                    top: "-100px"
                }), $.blockUI && ($.unblockUI(), $("body").append(this.dpDiv))), this._inDialog = !1
            }
        },
        _tidyDialog: function (a) {
            a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")
        },
        _checkExternalClick: function (a) {
            if (!$.datepicker._curInst) return;
            var b = $(a.target),
                c = $.datepicker._getInst(b[0]);
            (b[0].id != $.datepicker._mainDivId && b.parents("#" + $.datepicker._mainDivId).length == 0 && !b.hasClass($.datepicker.markerClassName) && !b.closest("." + $.datepicker._triggerClass).length && $.datepicker._datepickerShowing && (!$.datepicker._inDialog || !$.blockUI) || b.hasClass($.datepicker.markerClassName) && $.datepicker._curInst != c) && $.datepicker._hideDatepicker()
        },
        _adjustDate: function (a, b, c) {
            var d = $(a),
                e = this._getInst(d[0]);
            if (this._isDisabledDatepicker(d[0])) return;
            this._adjustInstDate(e, b + (c == "M" ? this._get(e, "showCurrentAtPos") : 0), c), this._updateDatepicker(e)
        },
        _gotoToday: function (a) {
            var b = $(a),
                c = this._getInst(b[0]);
            if (this._get(c, "gotoCurrent") && c.currentDay) c.selectedDay = c.currentDay, c.drawMonth = c.selectedMonth = c.currentMonth, c.drawYear = c.selectedYear = c.currentYear;
            else {
                var d = new Date;
                c.selectedDay = d.getDate(), c.drawMonth = c.selectedMonth = d.getMonth(), c.drawYear = c.selectedYear = d.getFullYear()
            }
            this._notifyChange(c), this._adjustDate(b)
        },
        _selectMonthYear: function (a, b, c) {
            var d = $(a),
                e = this._getInst(d[0]);
            e["selected" + (c == "M" ? "Month" : "Year")] = e["draw" + (c == "M" ? "Month" : "Year")] = parseInt(b.options[b.selectedIndex].value, 10), this._notifyChange(e), this._adjustDate(d)
        },
        _selectDay: function (a, b, c, d) {
            var e = $(a);
            if ($(d).hasClass(this._unselectableClass) || this._isDisabledDatepicker(e[0])) return;
            var f = this._getInst(e[0]);
            f.selectedDay = f.currentDay = $("a", d).html(), f.selectedMonth = f.currentMonth = b, f.selectedYear = f.currentYear = c, this._selectDate(a, this._formatDate(f, f.currentDay, f.currentMonth, f.currentYear))
        },
        _clearDate: function (a) {
            var b = $(a),
                c = this._getInst(b[0]);
            this._selectDate(b, "")
        },
        _selectDate: function (a, b) {
            var c = $(a),
                d = this._getInst(c[0]);
            b = b != null ? b : this._formatDate(d), d.input && d.input.val(b), this._updateAlternate(d);
            var e = this._get(d, "onSelect");
            e ? e.apply(d.input ? d.input[0] : null, [b, d]) : d.input && d.input.trigger("change"), d.inline ? this._updateDatepicker(d) : (this._hideDatepicker(), this._lastInput = d.input[0], typeof d.input[0] != "object" && d.input.focus(), this._lastInput = null)
        },
        _updateAlternate: function (a) {
            var b = this._get(a, "altField");
            if (b) {
                var c = this._get(a, "altFormat") || this._get(a, "dateFormat"),
                    d = this._getDate(a),
                    e = this.formatDate(c, d, this._getFormatConfig(a));
                $(b).each(function () {
                    $(this).val(e)
                })
            }
        },
        noWeekends: function (a) {
            var b = a.getDay();
            return [b > 0 && b < 6, ""]
        },
        iso8601Week: function (a) {
            var b = new Date(a.getTime());
            b.setDate(b.getDate() + 4 - (b.getDay() || 7));
            var c = b.getTime();
            return b.setMonth(0), b.setDate(1), Math.floor(Math.round((c - b) / 864e5) / 7) + 1
        },
        parseDate: function (a, b, c) {
            if (a == null || b == null) throw "Invalid arguments";
            b = typeof b == "object" ? b.toString() : b + "";
            if (b == "") return null;
            var d = (c ? c.shortYearCutoff : null) || this._defaults.shortYearCutoff;
            d = typeof d != "string" ? d : (new Date).getFullYear() % 100 + parseInt(d, 10);
            var e = (c ? c.dayNamesShort : null) || this._defaults.dayNamesShort,
                f = (c ? c.dayNames : null) || this._defaults.dayNames,
                g = (c ? c.monthNamesShort : null) || this._defaults.monthNamesShort,
                h = (c ? c.monthNames : null) || this._defaults.monthNames,
                i = -1,
                j = -1,
                k = -1,
                l = -1,
                m = !1,
                n = function (b) {
                    var c = s + 1 < a.length && a.charAt(s + 1) == b;
                    return c && s++, c
                },
                o = function (a) {
                    var c = n(a),
                        d = a == "@" ? 14 : a == "!" ? 20 : a == "y" && c ? 4 : a == "o" ? 3 : 2,
                        e = new RegExp("^\\d{1," + d + "}"),
                        f = b.substring(r).match(e);
                    if (!f) throw "Missing number at position " + r;
                    return r += f[0].length, parseInt(f[0], 10)
                },
                p = function (a, c, d) {
                    var e = $.map(n(a) ? d : c, function (a, b) {
                        return [[b, a]]
                    }).sort(function (a, b) {
                        return -(a[1].length - b[1].length)
                    }),
                        f = -1;
                    $.each(e, function (a, c) {
                        var d = c[1];
                        if (b.substr(r, d.length).toLowerCase() == d.toLowerCase()) return f = c[0], r += d.length, !1
                    });
                    if (f != -1) return f + 1;
                    throw "Unknown name at position " + r
                },
                q = function () {
                    if (b.charAt(r) != a.charAt(s)) throw "Unexpected literal at position " + r;
                    r++
                },
                r = 0;
            for (var s = 0; s < a.length; s++) if (m) a.charAt(s) == "'" && !n("'") ? m = !1 : q();
            else switch (a.charAt(s)) {
            case "d":
                k = o("d");
                break;
            case "D":
                p("D", e, f);
                break;
            case "o":
                l = o("o");
                break;
            case "m":
                j = o("m");
                break;
            case "M":
                j = p("M", g, h);
                break;
            case "y":
                i = o("y");
                break;
            case "@":
                var t = new Date(o("@"));
                i = t.getFullYear(), j = t.getMonth() + 1, k = t.getDate();
                break;
            case "!":
                var t = new Date((o("!") - this._ticksTo1970) / 1e4);
                i = t.getFullYear(), j = t.getMonth() + 1, k = t.getDate();
                break;
            case "'":
                n("'") ? q() : m = !0;
                break;
            default:
                q()
            }
            if (r < b.length) {
                var u = b.substr(r);
                if (!/^\s+/.test(u)) throw "Extra/unparsed characters found in date: " + u
            }
            i == -1 ? i = (new Date).getFullYear() : i < 100 && (i += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (i <= d ? 0 : -100));
            if (l > -1) {
                j = 1, k = l;
                do {
                    var v = this._getDaysInMonth(i, j - 1);
                    if (k <= v) break;
                    j++, k -= v
                } while (!0)
            }
            var t = this._daylightSavingAdjust(new Date(i, j - 1, k));
            if (t.getFullYear() != i || t.getMonth() + 1 != j || t.getDate() != k) throw "Invalid date";
            return t
        },
        ATOM: "yy-mm-dd",
        COOKIE: "D, dd M yy",
        ISO_8601: "yy-mm-dd",
        RFC_822: "D, d M y",
        RFC_850: "DD, dd-M-y",
        RFC_1036: "D, d M y",
        RFC_1123: "D, d M yy",
        RFC_2822: "D, d M yy",
        RSS: "D, d M y",
        TICKS: "!",
        TIMESTAMP: "@",
        W3C: "yy-mm-dd",
        _ticksTo1970: (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)) * 24 * 60 * 60 * 1e7,
        formatDate: function (a, b, c) {
            if (!b) return "";
            var d = (c ? c.dayNamesShort : null) || this._defaults.dayNamesShort,
                e = (c ? c.dayNames : null) || this._defaults.dayNames,
                f = (c ? c.monthNamesShort : null) || this._defaults.monthNamesShort,
                g = (c ? c.monthNames : null) || this._defaults.monthNames,
                h = function (b) {
                    var c = m + 1 < a.length && a.charAt(m + 1) == b;
                    return c && m++, c
                },
                i = function (a, b, c) {
                    var d = "" + b;
                    if (h(a)) while (d.length < c) d = "0" + d;
                    return d
                },
                j = function (a, b, c, d) {
                    return h(a) ? d[b] : c[b]
                },
                k = "",
                l = !1;
            if (b) for (var m = 0; m < a.length; m++) if (l) a.charAt(m) == "'" && !h("'") ? l = !1 : k += a.charAt(m);
            else switch (a.charAt(m)) {
            case "d":
                k += i("d", b.getDate(), 2);
                break;
            case "D":
                k += j("D", b.getDay(), d, e);
                break;
            case "o":
                k += i("o", Math.round(((new Date(b.getFullYear(), b.getMonth(), b.getDate())).getTime() - (new Date(b.getFullYear(), 0, 0)).getTime()) / 864e5), 3);
                break;
            case "m":
                k += i("m", b.getMonth() + 1, 2);
                break;
            case "M":
                k += j("M", b.getMonth(), f, g);
                break;
            case "y":
                k += h("y") ? b.getFullYear() : (b.getYear() % 100 < 10 ? "0" : "") + b.getYear() % 100;
                break;
            case "@":
                k += b.getTime();
                break;
            case "!":
                k += b.getTime() * 1e4 + this._ticksTo1970;
                break;
            case "'":
                h("'") ? k += "'" : l = !0;
                break;
            default:
                k += a.charAt(m)
            }
            return k
        },
        _possibleChars: function (a) {
            var b = "",
                c = !1,
                d = function (b) {
                    var c = e + 1 < a.length && a.charAt(e + 1) == b;
                    return c && e++, c
                };
            for (var e = 0; e < a.length; e++) if (c) a.charAt(e) == "'" && !d("'") ? c = !1 : b += a.charAt(e);
            else switch (a.charAt(e)) {
            case "d":
            case "m":
            case "y":
            case "@":
                b += "0123456789";
                break;
            case "D":
            case "M":
                return null;
            case "'":
                d("'") ? b += "'" : c = !0;
                break;
            default:
                b += a.charAt(e)
            }
            return b
        },
        _get: function (a, b) {
            return a.settings[b] !== undefined ? a.settings[b] : this._defaults[b]
        },
        _setDateFromField: function (a, b) {
            if (a.input.val() == a.lastVal) return;
            var c = this._get(a, "dateFormat"),
                d = a.lastVal = a.input ? a.input.val() : null,
                e, f;
            e = f = this._getDefaultDate(a);
            var g = this._getFormatConfig(a);
            try {
                e = this.parseDate(c, d, g) || f
            } catch (h) {
                this.log(h), d = b ? "" : d
            }
            a.selectedDay = e.getDate(), a.drawMonth = a.selectedMonth = e.getMonth(), a.drawYear = a.selectedYear = e.getFullYear(), a.currentDay = d ? e.getDate() : 0, a.currentMonth = d ? e.getMonth() : 0, a.currentYear = d ? e.getFullYear() : 0, this._adjustInstDate(a)
        },
        _getDefaultDate: function (a) {
            return this._restrictMinMax(a, this._determineDate(a, this._get(a, "defaultDate"), new Date))
        },
        _determineDate: function (a, b, c) {
            var d = function (a) {
                    var b = new Date;
                    return b.setDate(b.getDate() + a), b
                },
                e = function (b) {
                    try {
                        return $.datepicker.parseDate($.datepicker._get(a, "dateFormat"), b, $.datepicker._getFormatConfig(a))
                    } catch (c) {}
                    var d = (b.toLowerCase().match(/^c/) ? $.datepicker._getDate(a) : null) || new Date,
                        e = d.getFullYear(),
                        f = d.getMonth(),
                        g = d.getDate(),
                        h = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
                        i = h.exec(b);
                    while (i) {
                        switch (i[2] || "d") {
                        case "d":
                        case "D":
                            g += parseInt(i[1], 10);
                            break;
                        case "w":
                        case "W":
                            g += parseInt(i[1], 10) * 7;
                            break;
                        case "m":
                        case "M":
                            f += parseInt(i[1], 10), g = Math.min(g, $.datepicker._getDaysInMonth(e, f));
                            break;
                        case "y":
                        case "Y":
                            e += parseInt(i[1], 10), g = Math.min(g, $.datepicker._getDaysInMonth(e, f))
                        }
                        i = h.exec(b)
                    }
                    return new Date(e, f, g)
                },
                f = b == null || b === "" ? c : typeof b == "string" ? e(b) : typeof b == "number" ? isNaN(b) ? c : d(b) : new Date(b.getTime());
            return f = f && f.toString() == "Invalid Date" ? c : f, f && (f.setHours(0), f.setMinutes(0), f.setSeconds(0), f.setMilliseconds(0)), this._daylightSavingAdjust(f)
        },
        _daylightSavingAdjust: function (a) {
            return a ? (a.setHours(a.getHours() > 12 ? a.getHours() + 2 : 0), a) : null
        },
        _setDate: function (a, b, c) {
            var d = !b,
                e = a.selectedMonth,
                f = a.selectedYear,
                g = this._restrictMinMax(a, this._determineDate(a, b, new Date));
            a.selectedDay = a.currentDay = g.getDate(), a.drawMonth = a.selectedMonth = a.currentMonth = g.getMonth(), a.drawYear = a.selectedYear = a.currentYear = g.getFullYear(), (e != a.selectedMonth || f != a.selectedYear) && !c && this._notifyChange(a), this._adjustInstDate(a), a.input && a.input.val(d ? "" : this._formatDate(a))
        },
        _getDate: function (a) {
            var b = !a.currentYear || a.input && a.input.val() == "" ? null : this._daylightSavingAdjust(new Date(a.currentYear, a.currentMonth, a.currentDay));
            return b
        },
        _attachHandlers: function (a) {
            var b = this._get(a, "stepMonths"),
                c = "#" + a.id;
            a.dpDiv.find("[data-handler]").map(function () {
                var a = {
                    prev: function () {
                        window["DP_jQuery_" + dpuuid].datepicker._adjustDate(c, -b, "M")
                    },
                    next: function () {
                        window["DP_jQuery_" + dpuuid].datepicker._adjustDate(c, +b, "M")
                    },
                    hide: function () {
                        window["DP_jQuery_" + dpuuid].datepicker._hideDatepicker()
                    },
                    today: function () {
                        window["DP_jQuery_" + dpuuid].datepicker._gotoToday(c)
                    },
                    selectDay: function () {
                        return window["DP_jQuery_" + dpuuid].datepicker._selectDay(c, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this), !1
                    },
                    selectMonth: function () {
                        return window["DP_jQuery_" + dpuuid].datepicker._selectMonthYear(c, this, "M"), !1
                    },
                    selectYear: function () {
                        return window["DP_jQuery_" + dpuuid].datepicker._selectMonthYear(c, this, "Y"), !1
                    }
                };
                $(this).bind(this.getAttribute("data-event"), a[this.getAttribute("data-handler")])
            })
        },
        _generateHTML: function (a) {
            var b = new Date;
            b = this._daylightSavingAdjust(new Date(b.getFullYear(), b.getMonth(), b.getDate()));
            var c = this._get(a, "isRTL"),
                d = this._get(a, "showButtonPanel"),
                e = this._get(a, "hideIfNoPrevNext"),
                f = this._get(a, "navigationAsDateFormat"),
                g = this._getNumberOfMonths(a),
                h = this._get(a, "showCurrentAtPos"),
                i = this._get(a, "stepMonths"),
                j = g[0] != 1 || g[1] != 1,
                k = this._daylightSavingAdjust(a.currentDay ? new Date(a.currentYear, a.currentMonth, a.currentDay) : new Date(9999, 9, 9)),
                l = this._getMinMaxDate(a, "min"),
                m = this._getMinMaxDate(a, "max"),
                n = a.drawMonth - h,
                o = a.drawYear;
            n < 0 && (n += 12, o--);
            if (m) {
                var p = this._daylightSavingAdjust(new Date(m.getFullYear(), m.getMonth() - g[0] * g[1] + 1, m.getDate()));
                p = l && p < l ? l : p;
                while (this._daylightSavingAdjust(new Date(o, n, 1)) > p) n--, n < 0 && (n = 11, o--)
            }
            a.drawMonth = n, a.drawYear = o;
            var q = this._get(a, "prevText");
            q = f ? this.formatDate(q, this._daylightSavingAdjust(new Date(o, n - i, 1)), this._getFormatConfig(a)) : q;
            var r = this._canAdjustMonth(a, -1, o, n) ? '<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click" title="' + q + '"><span class="ui-icon ui-icon-circle-triangle-' + (c ? "e" : "w") + '">' + q + "</span></a>" : e ? "" : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="' + q + '"><span class="ui-icon ui-icon-circle-triangle-' + (c ? "e" : "w") + '">' + q + "</span></a>",
                s = this._get(a, "nextText");
            s = f ? this.formatDate(s, this._daylightSavingAdjust(new Date(o, n + i, 1)), this._getFormatConfig(a)) : s;
            var t = this._canAdjustMonth(a, 1, o, n) ? '<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click" title="' + s + '"><span class="ui-icon ui-icon-circle-triangle-' + (c ? "w" : "e") + '">' + s + "</span></a>" : e ? "" : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="' + s + '"><span class="ui-icon ui-icon-circle-triangle-' + (c ? "w" : "e") + '">' + s + "</span></a>",
                u = this._get(a, "currentText"),
                v = this._get(a, "gotoCurrent") && a.currentDay ? k : b;
            u = f ? this.formatDate(u, v, this._getFormatConfig(a)) : u;
            var w = a.inline ? "" : '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" data-handler="hide" data-event="click">' + this._get(a, "closeText") + "</button>",
                x = d ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (c ? w : "") + (this._isInRange(a, v) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click">' + u + "</button>" : "") + (c ? "" : w) + "</div>" : "",
                y = parseInt(this._get(a, "firstDay"), 10);
            y = isNaN(y) ? 0 : y;
            var z = this._get(a, "showWeek"),
                A = this._get(a, "dayNames"),
                B = this._get(a, "dayNamesShort"),
                C = this._get(a, "dayNamesMin"),
                D = this._get(a, "monthNames"),
                E = this._get(a, "monthNamesShort"),
                F = this._get(a, "beforeShowDay"),
                G = this._get(a, "showOtherMonths"),
                H = this._get(a, "selectOtherMonths"),
                I = this._get(a, "calculateWeek") || this.iso8601Week,
                J = this._getDefaultDate(a),
                K = "";
            for (var L = 0; L < g[0]; L++) {
                var M = "";
                this.maxRows = 4;
                for (var N = 0; N < g[1]; N++) {
                    var O = this._daylightSavingAdjust(new Date(o, n, a.selectedDay)),
                        P = " ui-corner-all",
                        Q = "";
                    if (j) {
                        Q += '<div class="ui-datepicker-group';
                        if (g[1] > 1) switch (N) {
                        case 0:
                            Q += " ui-datepicker-group-first", P = " ui-corner-" + (c ? "right" : "left");
                            break;
                        case g[1] - 1:
                            Q += " ui-datepicker-group-last", P = " ui-corner-" + (c ? "left" : "right");
                            break;
                        default:
                            Q += " ui-datepicker-group-middle", P = ""
                        }
                        Q += '">'
                    }
                    Q += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + P + '">' + (/all|left/.test(P) && L == 0 ? c ? t : r : "") + (/all|right/.test(P) && L == 0 ? c ? r : t : "") + this._generateMonthYearHeader(a, n, o, l, m, L > 0 || N > 0, D, E) + '</div><table class="ui-datepicker-calendar"><thead>' + "<tr>";
                    var R = z ? '<th class="ui-datepicker-week-col">' + this._get(a, "weekHeader") + "</th>" : "";
                    for (var S = 0; S < 7; S++) {
                        var T = (S + y) % 7;
                        R += "<th" + ((S + y + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : "") + ">" + '<span title="' + A[T] + '">' + C[T] + "</span></th>"
                    }
                    Q += R + "</tr></thead><tbody>";
                    var U = this._getDaysInMonth(o, n);
                    o == a.selectedYear && n == a.selectedMonth && (a.selectedDay = Math.min(a.selectedDay, U));
                    var V = (this._getFirstDayOfMonth(o, n) - y + 7) % 7,
                        W = Math.ceil((V + U) / 7),
                        X = j ? this.maxRows > W ? this.maxRows : W : W;
                    this.maxRows = X;
                    var Y = this._daylightSavingAdjust(new Date(o, n, 1 - V));
                    for (var Z = 0; Z < X; Z++) {
                        Q += "<tr>";
                        var _ = z ? '<td class="ui-datepicker-week-col">' + this._get(a, "calculateWeek")(Y) + "</td>" : "";
                        for (var S = 0; S < 7; S++) {
                            var ab = F ? F.apply(a.input ? a.input[0] : null, [Y]) : [!0, ""],
                                bb = Y.getMonth() != n,
                                cb = bb && !H || !ab[0] || l && Y < l || m && Y > m;
                            _ += '<td class="' + ((S + y + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + (bb ? " ui-datepicker-other-month" : "") + (Y.getTime() == O.getTime() && n == a.selectedMonth && a._keyEvent || J.getTime() == Y.getTime() && J.getTime() == O.getTime() ? " " + this._dayOverClass : "") + (cb ? " " + this._unselectableClass + " ui-state-disabled" : "") + (bb && !G ? "" : " " + ab[1] + (Y.getTime() == k.getTime() ? " " + this._currentClass : "") + (Y.getTime() == b.getTime() ? " ui-datepicker-today" : "")) + '"' + ((!bb || G) && ab[2] ? ' title="' + ab[2] + '"' : "") + (cb ? "" : ' data-handler="selectDay" data-event="click" data-month="' + Y.getMonth() + '" data-year="' + Y.getFullYear() + '"') + ">" + (bb && !G ? "&#xa0;" : cb ? '<span class="ui-state-default">' + Y.getDate() + "</span>" : '<a class="ui-state-default' + (Y.getTime() == b.getTime() ? " ui-state-highlight" : "") + (Y.getTime() == k.getTime() ? " ui-state-active" : "") + (bb ? " ui-priority-secondary" : "") + '" href="#">' + Y.getDate() + "</a>") + "</td>", Y.setDate(Y.getDate() + 1), Y = this._daylightSavingAdjust(Y)
                        }
                        Q += _ + "</tr>"
                    }
                    n++, n > 11 && (n = 0, o++), Q += "</tbody></table>" + (j ? "</div>" + (g[0] > 0 && N == g[1] - 1 ? '<div class="ui-datepicker-row-break"></div>' : "") : ""), M += Q
                }
                K += M
            }
            return K += x + ($.browser.msie && parseInt($.browser.version, 10) < 7 && !a.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : ""), a._keyEvent = !1, K
        },
        _generateMonthYearHeader: function (a, b, c, d, e, f, g, h) {
            var i = this._get(a, "changeMonth"),
                j = this._get(a, "changeYear"),
                k = this._get(a, "showMonthAfterYear"),
                l = '<div class="ui-datepicker-title">',
                m = "";
            if (f || !i) m += '<span class="ui-datepicker-month">' + g[b] + "</span>";
            else {
                var n = d && d.getFullYear() == c,
                    o = e && e.getFullYear() == c;
                m += '<select class="ui-datepicker-month" data-handler="selectMonth" data-event="change">';
                for (var p = 0; p < 12; p++)(!n || p >= d.getMonth()) && (!o || p <= e.getMonth()) && (m += '<option value="' + p + '"' + (p == b ? ' selected="selected"' : "") + ">" + h[p] + "</option>");
                m += "</select>"
            }
            k || (l += m + (f || !i || !j ? "&#xa0;" : ""));
            if (!a.yearshtml) {
                a.yearshtml = "";
                if (f || !j) l += '<span class="ui-datepicker-year">' + c + "</span>";
                else {
                    var q = this._get(a, "yearRange").split(":"),
                        r = (new Date).getFullYear(),
                        s = function (a) {
                            var b = a.match(/c[+-].*/) ? c + parseInt(a.substring(1), 10) : a.match(/[+-].*/) ? r + parseInt(a, 10) : parseInt(a, 10);
                            return isNaN(b) ? r : b
                        },
                        t = s(q[0]),
                        u = Math.max(t, s(q[1] || ""));
                    t = d ? Math.max(t, d.getFullYear()) : t, u = e ? Math.min(u, e.getFullYear()) : u, a.yearshtml += '<select class="ui-datepicker-year" data-handler="selectYear" data-event="change">';
                    for (; t <= u; t++) a.yearshtml += '<option value="' + t + '"' + (t == c ? ' selected="selected"' : "") + ">" + t + "</option>";
                    a.yearshtml += "</select>", l += a.yearshtml, a.yearshtml = null
                }
            }
            return l += this._get(a, "yearSuffix"), k && (l += (f || !i || !j ? "&#xa0;" : "") + m), l += "</div>", l
        },
        _adjustInstDate: function (a, b, c) {
            var d = a.drawYear + (c == "Y" ? b : 0),
                e = a.drawMonth + (c == "M" ? b : 0),
                f = Math.min(a.selectedDay, this._getDaysInMonth(d, e)) + (c == "D" ? b : 0),
                g = this._restrictMinMax(a, this._daylightSavingAdjust(new Date(d, e, f)));
            a.selectedDay = g.getDate(), a.drawMonth = a.selectedMonth = g.getMonth(), a.drawYear = a.selectedYear = g.getFullYear(), (c == "M" || c == "Y") && this._notifyChange(a)
        },
        _restrictMinMax: function (a, b) {
            var c = this._getMinMaxDate(a, "min"),
                d = this._getMinMaxDate(a, "max"),
                e = c && b < c ? c : b;
            return e = d && e > d ? d : e, e
        },
        _notifyChange: function (a) {
            var b = this._get(a, "onChangeMonthYear");
            b && b.apply(a.input ? a.input[0] : null, [a.selectedYear, a.selectedMonth + 1, a])
        },
        _getNumberOfMonths: function (a) {
            var b = this._get(a, "numberOfMonths");
            return b == null ? [1, 1] : typeof b == "number" ? [1, b] : b
        },
        _getMinMaxDate: function (a, b) {
            return this._determineDate(a, this._get(a, b + "Date"), null)
        },
        _getDaysInMonth: function (a, b) {
            return 32 - this._daylightSavingAdjust(new Date(a, b, 32)).getDate()
        },
        _getFirstDayOfMonth: function (a, b) {
            return (new Date(a, b, 1)).getDay()
        },
        _canAdjustMonth: function (a, b, c, d) {
            var e = this._getNumberOfMonths(a),
                f = this._daylightSavingAdjust(new Date(c, d + (b < 0 ? b : e[0] * e[1]), 1));
            return b < 0 && f.setDate(this._getDaysInMonth(f.getFullYear(), f.getMonth())), this._isInRange(a, f)
        },
        _isInRange: function (a, b) {
            var c = this._getMinMaxDate(a, "min"),
                d = this._getMinMaxDate(a, "max");
            return (!c || b.getTime() >= c.getTime()) && (!d || b.getTime() <= d.getTime())
        },
        _getFormatConfig: function (a) {
            var b = this._get(a, "shortYearCutoff");
            return b = typeof b != "string" ? b : (new Date).getFullYear() % 100 + parseInt(b, 10), {
                shortYearCutoff: b,
                dayNamesShort: this._get(a, "dayNamesShort"),
                dayNames: this._get(a, "dayNames"),
                monthNamesShort: this._get(a, "monthNamesShort"),
                monthNames: this._get(a, "monthNames")
            }
        },
        _formatDate: function (a, b, c, d) {
            b || (a.currentDay = a.selectedDay, a.currentMonth = a.selectedMonth, a.currentYear = a.selectedYear);
            var e = b ? typeof b == "object" ? b : this._daylightSavingAdjust(new Date(d, c, b)) : this._daylightSavingAdjust(new Date(a.currentYear, a.currentMonth, a.currentDay));
            return this.formatDate(this._get(a, "dateFormat"), e, this._getFormatConfig(a))
        }
    }), $.fn.datepicker = function (a) {
        if (!this.length) return this;
        $.datepicker.initialized || ($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv), $.datepicker.initialized = !0);
        var b = Array.prototype.slice.call(arguments, 1);
        return typeof a != "string" || a != "isDisabled" && a != "getDate" && a != "widget" ? a == "option" && arguments.length == 2 && typeof arguments[1] == "string" ? $.datepicker["_" + a + "Datepicker"].apply($.datepicker, [this[0]].concat(b)) : this.each(function () {
            typeof a == "string" ? $.datepicker["_" + a + "Datepicker"].apply($.datepicker, [this].concat(b)) : $.datepicker._attachDatepicker(this, a)
        }) : $.datepicker["_" + a + "Datepicker"].apply($.datepicker, [this[0]].concat(b))
    }, $.datepicker = new Datepicker, $.datepicker.initialized = !1, $.datepicker.uuid = (new Date).getTime(), $.datepicker.version = "@VERSION", window["DP_jQuery_" + dpuuid] = $
}), define("jqueryui/core", ["jquery"], function (a) {
    function d(b, c) {
        var d, f, g, h = b.nodeName.toLowerCase();
        return "area" === h ? (d = b.parentNode, f = d.name, !b.href || !f || d.nodeName.toLowerCase() !== "map" ? !1 : (g = a("img[usemap=#" + f + "]")[0], !! g && e(g))) : (/input|select|textarea|button|object/.test(h) ? !b.disabled : "a" === h ? b.href || c : c) && e(b)
    }
    function e(b) {
        return !a(b).parents().andSelf().filter(function () {
            return a.css(this, "visibility") === "hidden" || a.expr.filters.hidden(this)
        }).length
    }
    var b = 0,
        c = /^ui-id-\d+$/;
    a.ui = a.ui || {};
    if (a.ui.version) return;
    a.extend(a.ui, {
        version: "@VERSION",
        keyCode: {
            BACKSPACE: 8,
            COMMA: 188,
            DELETE: 46,
            DOWN: 40,
            END: 35,
            ENTER: 13,
            ESCAPE: 27,
            HOME: 36,
            LEFT: 37,
            NUMPAD_ADD: 107,
            NUMPAD_DECIMAL: 110,
            NUMPAD_DIVIDE: 111,
            NUMPAD_ENTER: 108,
            NUMPAD_MULTIPLY: 106,
            NUMPAD_SUBTRACT: 109,
            PAGE_DOWN: 34,
            PAGE_UP: 33,
            PERIOD: 190,
            RIGHT: 39,
            SPACE: 32,
            TAB: 9,
            UP: 38
        }
    }), a.fn.extend({
        _focus: a.fn.focus,
        focus: function (b, c) {
            return typeof b == "number" ? this.each(function () {
                var d = this;
                setTimeout(function () {
                    a(d).focus(), c && c.call(d)
                }, b)
            }) : this._focus.apply(this, arguments)
        },
        scrollParent: function () {
            var b;
            return a.browser.msie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? b = this.parents().filter(function () {
                return /(relative|absolute|fixed)/.test(a.css(this, "position")) && /(auto|scroll)/.test(a.css(this, "overflow") + a.css(this, "overflow-y") + a.css(this, "overflow-x"))
            }).eq(0) : b = this.parents().filter(function () {
                return /(auto|scroll)/.test(a.css(this, "overflow") + a.css(this, "overflow-y") + a.css(this, "overflow-x"))
            }).eq(0), /fixed/.test(this.css("position")) || !b.length ? a(document) : b
        },
        zIndex: function (b) {
            if (b !== undefined) return this.css("zIndex", b);
            if (this.length) {
                var c = a(this[0]),
                    d, e;
                while (c.length && c[0] !== document) {
                    d = c.css("position");
                    if (d === "absolute" || d === "relative" || d === "fixed") {
                        e = parseInt(c.css("zIndex"), 10);
                        if (!isNaN(e) && e !== 0) return e
                    }
                    c = c.parent()
                }
            }
            return 0
        },
        uniqueId: function () {
            return this.each(function () {
                this.id || (this.id = "ui-id-" + ++b)
            })
        },
        removeUniqueId: function () {
            return this.each(function () {
                c.test(this.id) && a(this).removeAttr("id")
            })
        },
        disableSelection: function () {
            return this.bind((a.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function (a) {
                a.preventDefault()
            })
        },
        enableSelection: function () {
            return this.unbind(".ui-disableSelection")
        }
    }), a("<a>").outerWidth(1).jquery || a.each(["Width", "Height"], function (b, c) {
        function g(b, c, e, f) {
            return a.each(d, function () {
                c -= parseFloat(a.css(b, "padding" + this)) || 0, e && (c -= parseFloat(a.css(b, "border" + this + "Width")) || 0), f && (c -= parseFloat(a.css(b, "margin" + this)) || 0)
            }), c
        }
        var d = c === "Width" ? ["Left", "Right"] : ["Top", "Bottom"],
            e = c.toLowerCase(),
            f = {
                innerWidth: a.fn.innerWidth,
                innerHeight: a.fn.innerHeight,
                outerWidth: a.fn.outerWidth,
                outerHeight: a.fn.outerHeight
            };
        a.fn["inner" + c] = function (b) {
            return b === undefined ? f["inner" + c].call(this) : this.each(function () {
                a(this).css(e, g(this, b) + "px")
            })
        }, a.fn["outer" + c] = function (b, d) {
            return typeof b != "number" ? f["outer" + c].call(this, b) : this.each(function () {
                a(this).css(e, g(this, b, !0, d) + "px")
            })
        }
    }), a.extend(a.expr[":"], {
        data: function (b, c, d) {
            return !!a.data(b, d[3])
        },
        focusable: function (b) {
            return d(b, !isNaN(a.attr(b, "tabindex")))
        },
        tabbable: function (b) {
            var c = a.attr(b, "tabindex"),
                e = isNaN(c);
            return (e || c >= 0) && d(b, !e)
        }
    }), a(function () {
        var b = document.body,
            c = b.appendChild(c = document.createElement("div"));
        c.offsetHeight, a.extend(c.style, {
            minHeight: "100px",
            height: "auto",
            padding: 0,
            borderWidth: 0
        }), a.support.minHeight = c.offsetHeight === 100, a.support.selectstart = "onselectstart" in c, b.removeChild(c).style.display = "none"
    }), a.extend(a.ui, {
        plugin: {
            add: function (b, c, d) {
                var e, f = a.ui[b].prototype;
                for (e in d) f.plugins[e] = f.plugins[e] || [], f.plugins[e].push([c, d[e]])
            },
            call: function (a, b, c) {
                var d, e = a.plugins[b];
                if (!e || !a.element[0].parentNode || a.element[0].parentNode.nodeType === 11) return;
                for (d = 0; d < e.length; d++) a.options[e[d][0]] && e[d][1].apply(a.element, c)
            }
        },
        contains: a.contains,
        hasScroll: function (b, c) {
            if (a(b).css("overflow") === "hidden") return !1;
            var d = c && c === "left" ? "scrollLeft" : "scrollTop",
                e = !1;
            return b[d] > 0 ? !0 : (b[d] = 1, e = b[d] > 0, b[d] = 0, e)
        },
        isOverAxis: function (a, b, c) {
            return a > b && a < b + c
        },
        isOver: function (b, c, d, e, f, g) {
            return a.ui.isOverAxis(b, d, f) && a.ui.isOverAxis(c, e, g)
        }
    })
}), define("jqueryui/widget-unpatched", ["jquery"], function (a) {
    var b = 0,
        c = Array.prototype.slice,
        d = a.cleanData;
    a.cleanData = function (b) {
        for (var c = 0, e;
        (e = b[c]) != null; c++) try {
            a(e).triggerHandler("remove")
        } catch (f) {}
        d(b)
    }, a.widget = function (b, c, d) {
        var e, f, g, h, i = b.split(".")[0];
        b = b.split(".")[1], e = i + "-" + b, d || (d = c, c = a.Widget), a.expr[":"][e] = function (b) {
            return !!a.data(b, e)
        }, a[i] = a[i] || {}, f = a[i][b], g = a[i][b] = function (a, b) {
            if (!this._createWidget) return new g(a, b);
            arguments.length && this._createWidget(a, b)
        }, a.extend(g, f, {
            version: d.version,
            _proto: a.extend({}, d),
            _childConstructors: []
        }), h = new c, h.options = a.widget.extend({}, h.options), a.each(d, function (b, e) {
            a.isFunction(e) && (d[b] = function () {
                var a = function () {
                        return c.prototype[b].apply(this, arguments)
                    },
                    d = function (a) {
                        return c.prototype[b].apply(this, a)
                    };
                return function () {
                    var b = this._super,
                        c = this._superApply,
                        f;
                    return this._super = a, this._superApply = d, f = e.apply(this, arguments), this._super = b, this._superApply = c, f
                }
            }())
        }), g.prototype = a.widget.extend(h, {
            widgetEventPrefix: b
        }, d, {
            constructor: g,
            namespace: i,
            widgetName: b,
            widgetBaseClass: e,
            widgetFullName: e
        }), f ? (a.each(f._childConstructors, function (b, c) {
            var d = c.prototype;
            a.widget(d.namespace + "." + d.widgetName, g, c._proto)
        }), delete f._childConstructors) : c._childConstructors.push(g), a.widget.bridge(b, g)
    }, a.widget.extend = function (b) {
        var d = c.call(arguments, 1),
            e = 0,
            f = d.length,
            g, h;
        for (; e < f; e++) for (g in d[e]) h = d[e][g], d[e].hasOwnProperty(g) && h !== undefined && (b[g] = a.isPlainObject(h) ? a.widget.extend({}, b[g], h) : h);
        return b
    }, a.widget.bridge = function (b, d) {
        var e = d.prototype.widgetFullName;
        a.fn[b] = function (f) {
            var g = typeof f == "string",
                h = c.call(arguments, 1),
                i = this;
            return f = !g && h.length ? a.widget.extend.apply(null, [f].concat(h)) : f, g ? this.each(function () {
                var c, d = a.data(this, e);
                if (!d) return a.error("cannot call methods on " + b + " prior to initialization; " + "attempted to call method '" + f + "'");
                if (!a.isFunction(d[f]) || f.charAt(0) === "_") return a.error("no such method '" + f + "' for " + b + " widget instance");
                c = d[f].apply(d, h);
                if (c !== d && c !== undefined) return i = c && c.jquery ? i.pushStack(c.get()) : c, !1
            }) : this.each(function () {
                var b = a.data(this, e);
                b ? b.option(f || {})._init() : new d(f, this)
            }), i
        }
    }, a.Widget = function (a, b) {}, a.Widget._childConstructors = [], a.Widget.prototype = {
        widgetName: "widget",
        widgetEventPrefix: "",
        defaultElement: "<div>",
        options: {
            disabled: !1,
            create: null
        },
        _createWidget: function (c, d) {
            d = a(d || this.defaultElement || this)[0], this.element = a(d), this.uuid = b++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = a.widget.extend({}, this.options, this._getCreateOptions(), c), this.bindings = a(), this.hoverable = a(), this.focusable = a(), d !== this && (a.data(d, this.widgetName, this), a.data(d, this.widgetFullName, this), this._on({
                remove: "destroy"
            }), this.document = a(d.style ? d.ownerDocument : d.document || d), this.window = a(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
        },
        _getCreateOptions: a.noop,
        _getCreateEventData: a.noop,
        _create: a.noop,
        _init: a.noop,
        destroy: function () {
            this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled " + "ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
        },
        _destroy: a.noop,
        widget: function () {
            return this.element
        },
        option: function (b, c) {
            var d = b,
                e, f, g;
            if (arguments.length === 0) return a.widget.extend({}, this.options);
            if (typeof b == "string") {
                d = {}, e = b.split("."), b = e.shift();
                if (e.length) {
                    f = d[b] = a.widget.extend({}, this.options[b]);
                    for (g = 0; g < e.length - 1; g++) f[e[g]] = f[e[g]] || {}, f = f[e[g]];
                    b = e.pop();
                    if (c === undefined) return f[b] === undefined ? null : f[b];
                    f[b] = c
                } else {
                    if (c === undefined) return this.options[b] === undefined ? null : this.options[b];
                    d[b] = c
                }
            }
            return this._setOptions(d), this
        },
        _setOptions: function (a) {
            var b;
            for (b in a) this._setOption(b, a[b]);
            return this
        },
        _setOption: function (a, b) {
            return this.options[a] = b, a === "disabled" && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !! b).attr("aria-disabled", b), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")), this
        },
        enable: function () {
            return this._setOption("disabled", !1)
        },
        disable: function () {
            return this._setOption("disabled", !0)
        },
        _on: function (b, c) {
            c ? (b = a(b), this.bindings = this.bindings.add(b)) : (c = b, b = this.element);
            var d = this;
            a.each(c, function (c, e) {
                function f() {
                    if (d.options.disabled === !0 || a(this).hasClass("ui-state-disabled")) return;
                    return (typeof e == "string" ? d[e] : e).apply(d, arguments)
                }
                typeof e != "string" && (f.guid = e.guid = e.guid || f.guid || a.guid++);
                var g = c.match(/^(\w+)\s*(.*)$/),
                    h = g[1] + d.eventNamespace,
                    i = g[2];
                i ? d.widget().delegate(i, h, f) : b.bind(h, f)
            })
        },
        _off: function (a, b) {
            b = (b || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, a.unbind(b).undelegate(b)
        },
        _delay: function (a, b) {
            function c() {
                return (typeof a == "string" ? d[a] : a).apply(d, arguments)
            }
            var d = this;
            return setTimeout(c, b || 0)
        },
        _hoverable: function (b) {
            this.hoverable = this.hoverable.add(b), this._on(b, {
                mouseenter: function (b) {
                    a(b.currentTarget).addClass("ui-state-hover")
                },
                mouseleave: function (b) {
                    a(b.currentTarget).removeClass("ui-state-hover")
                }
            })
        },
        _focusable: function (b) {
            this.focusable = this.focusable.add(b), this._on(b, {
                focusin: function (b) {
                    a(b.currentTarget).addClass("ui-state-focus")
                },
                focusout: function (b) {
                    a(b.currentTarget).removeClass("ui-state-focus")
                }
            })
        },
        _trigger: function (b, c, d) {
            var e, f, g = this.options[b];
            d = d || {}, c = a.Event(c), c.type = (b === this.widgetEventPrefix ? b : this.widgetEventPrefix + b).toLowerCase(), c.target = this.element[0], f = c.originalEvent;
            if (f) for (e in f) e in c || (c[e] = f[e]);
            return this.element.trigger(c, d), !(a.isFunction(g) && g.apply(this.element[0], [c].concat(d)) === !1 || c.isDefaultPrevented())
        }
    }, a.each({
        show: "fadeIn",
        hide: "fadeOut"
    }, function (b, c) {
        a.Widget.prototype["_" + b] = function (d, e, f) {
            typeof e == "string" && (e = {
                effect: e
            });
            var g, h = e ? e === !0 || typeof e == "number" ? c : e.effect || c : b;
            e = e || {}, typeof e == "number" && (e = {
                duration: e
            }), g = !a.isEmptyObject(e), e.complete = f, e.delay && d.delay(e.delay), g && a.effects && (a.effects.effect[h] || a.uiBackCompat !== !1 && a.effects[h]) ? d[b](e) : h !== b && d[h] ? d[h](e.duration, e.easing, f) : d.queue(function (c) {
                a(this)[b](), f && f.call(d[0]), c()
            })
        }
    }), a.uiBackCompat !== !1 && (a.Widget.prototype._getCreateOptions = function () {
        return a.metadata && a.metadata.get(this.element[0])[this.widgetName]
    })
}), define("jqueryui/widget", ["jquery", "jqueryui/widget-unpatched"], function (a, b) {
    return a.widget.extend = function (b) {
        var c = Array.prototype.slice.call(arguments, 1),
            d = 0,
            e = c.length,
            f, g;
        for (; d < e; d++) for (f in c[d]) g = c[d][f], c[d].hasOwnProperty(f) && g !== undefined && (b[f] = a.isPlainObject(g) && a.isPlainObject(b[f]) ? a.widget.extend({}, b[f], g) : g);
        return b
    }, b
}), define("jqueryui/mouse", ["jquery", "jqueryui/widget"], function (a) {
    var b = !1;
    a(document).mouseup(function (a) {
        b = !1
    }), a.widget("ui.mouse", {
        version: "@VERSION",
        options: {
            cancel: "input,textarea,button,select,option",
            distance: 1,
            delay: 0
        },
        _mouseInit: function () {
            var b = this;
            this.element.bind("mousedown." + this.widgetName, function (a) {
                return b._mouseDown(a)
            }).bind("click." + this.widgetName, function (c) {
                if (!0 === a.data(c.target, b.widgetName + ".preventClickEvent")) return a.removeData(c.target, b.widgetName + ".preventClickEvent"), c.stopImmediatePropagation(), !1
            }), this.started = !1
        },
        _mouseDestroy: function () {
            this.element.unbind("." + this.widgetName), a(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate)
        },
        _mouseDown: function (c) {
            if (b) return;
            this._mouseStarted && this._mouseUp(c), this._mouseDownEvent = c;
            var d = this,
                e = c.which === 1,
                f = typeof this.options.cancel == "string" && c.target.nodeName ? a(c.target).closest(this.options.cancel).length : !1;
            if (!e || f || !this._mouseCapture(c)) return !0;
            this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function () {
                d.mouseDelayMet = !0
            }, this.options.delay));
            if (this._mouseDistanceMet(c) && this._mouseDelayMet(c)) {
                this._mouseStarted = this._mouseStart(c) !== !1;
                if (!this._mouseStarted) return c.preventDefault(), !0
            }
            return !0 === a.data(c.target, this.widgetName + ".preventClickEvent") && a.removeData(c.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function (a) {
                return d._mouseMove(a)
            }, this._mouseUpDelegate = function (a) {
                return d._mouseUp(a)
            }, a(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), c.preventDefault(), b = !0, !0
        },
        _mouseMove: function (b) {
            return !a.browser.msie || document.documentMode >= 9 || !! b.button ? this._mouseStarted ? (this._mouseDrag(b), b.preventDefault()) : (this._mouseDistanceMet(b) && this._mouseDelayMet(b) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, b) !== !1, this._mouseStarted ? this._mouseDrag(b) : this._mouseUp(b)), !this._mouseStarted) : this._mouseUp(b)
        },
        _mouseUp: function (b) {
            return a(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, b.target === this._mouseDownEvent.target && a.data(b.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(b)), !1
        },
        _mouseDistanceMet: function (a) {
            return Math.max(Math.abs(this._mouseDownEvent.pageX - a.pageX), Math.abs(this._mouseDownEvent.pageY - a.pageY)) >= this.options.distance
        },
        _mouseDelayMet: function (a) {
            return this.mouseDelayMet
        },
        _mouseStart: function (a) {},
        _mouseDrag: function (a) {},
        _mouseStop: function (a) {},
        _mouseCapture: function (a) {
            return !0
        }
    })
}), define("jqueryui/sortable", ["jquery", "jqueryui/core", "jqueryui/mouse", "jqueryui/widget"], function (a) {
    a.widget("ui.sortable", a.ui.mouse, {
        version: "@VERSION",
        widgetEventPrefix: "sort",
        ready: !1,
        options: {
            appendTo: "parent",
            axis: !1,
            connectWith: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            dropOnEmpty: !0,
            forcePlaceholderSize: !1,
            forceHelperSize: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            items: "> *",
            opacity: !1,
            placeholder: !1,
            revert: !1,
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            scope: "default",
            tolerance: "intersect",
            zIndex: 1e3
        },
        _create: function () {
            var a = this.options;
            this.containerCache = {}, this.element.addClass("ui-sortable"), this.refresh(), this.floating = this.items.length ? a.axis === "x" || /left|right/.test(this.items[0].item.css("float")) || /inline|table-cell/.test(this.items[0].item.css("display")) : !1, this.offset = this.element.offset(), this._mouseInit(), this.ready = !0
        },
        _destroy: function () {
            this.element.removeClass("ui-sortable ui-sortable-disabled"), this._mouseDestroy();
            for (var a = this.items.length - 1; a >= 0; a--) this.items[a].item.removeData(this.widgetName + "-item");
            return this
        },
        _setOption: function (b, c) {
            b === "disabled" ? (this.options[b] = c, this.widget().toggleClass("ui-sortable-disabled", !! c)) : a.Widget.prototype._setOption.apply(this, arguments)
        },
        _mouseCapture: function (b, c) {
            var d = this;
            if (this.reverting) return !1;
            if (this.options.disabled || this.options.type == "static") return !1;
            this._refreshItems(b);
            var e = null,
                f = a(b.target).parents().each(function () {
                    if (a.data(this, d.widgetName + "-item") == d) return e = a(this), !1
                });
            a.data(b.target, d.widgetName + "-item") == d && (e = a(b.target));
            if (!e) return !1;
            if (this.options.handle && !c) {
                var g = !1;
                a(this.options.handle, e).find("*").andSelf().each(function () {
                    this == b.target && (g = !0)
                });
                if (!g) return !1
            }
            return this.currentItem = e, this._removeCurrentsFromItems(), !0
        },
        _mouseStart: function (b, c, d) {
            var e = this.options;
            this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(b), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
                top: this.offset.top - this.margins.top,
                left: this.offset.left - this.margins.left
            }, a.extend(this.offset, {
                click: {
                    left: b.pageX - this.offset.left,
                    top: b.pageY - this.offset.top
                },
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(b), this.originalPageX = b.pageX, this.originalPageY = b.pageY, e.cursorAt && this._adjustOffsetFromHelper(e.cursorAt), this.domPosition = {
                prev: this.currentItem.prev()[0],
                parent: this.currentItem.parent()[0]
            }, this.helper[0] != this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), e.containment && this._setContainment(), e.cursor && (a("body").css("cursor") && (this._storedCursor = a("body").css("cursor")), a("body").css("cursor", e.cursor)), e.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", e.opacity)), e.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", e.zIndex)), this.scrollParent[0] != document && this.scrollParent[0].tagName != "HTML" && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", b, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions();
            if (!d) for (var f = this.containers.length - 1; f >= 0; f--) this.containers[f]._trigger("activate", b, this._uiHash(this));
            return a.ui.ddmanager && (a.ui.ddmanager.current = this), a.ui.ddmanager && !e.dropBehaviour && a.ui.ddmanager.prepareOffsets(this, b), this.dragging = !0, this.helper.addClass("ui-sortable-helper"), this._mouseDrag(b), !0
        },
        _mouseDrag: function (b) {
            this.position = this._generatePosition(b), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs);
            if (this.options.scroll) {
                var c = this.options,
                    d = !1;
                this.scrollParent[0] != document && this.scrollParent[0].tagName != "HTML" ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - b.pageY < c.scrollSensitivity ? this.scrollParent[0].scrollTop = d = this.scrollParent[0].scrollTop + c.scrollSpeed : b.pageY - this.overflowOffset.top < c.scrollSensitivity && (this.scrollParent[0].scrollTop = d = this.scrollParent[0].scrollTop - c.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - b.pageX < c.scrollSensitivity ? this.scrollParent[0].scrollLeft = d = this.scrollParent[0].scrollLeft + c.scrollSpeed : b.pageX - this.overflowOffset.left < c.scrollSensitivity && (this.scrollParent[0].scrollLeft = d = this.scrollParent[0].scrollLeft - c.scrollSpeed)) : (b.pageY - a(document).scrollTop() < c.scrollSensitivity ? d = a(document).scrollTop(a(document).scrollTop() - c.scrollSpeed) : a(window).height() - (b.pageY - a(document).scrollTop()) < c.scrollSensitivity && (d = a(document).scrollTop(a(document).scrollTop() + c.scrollSpeed)), b.pageX - a(document).scrollLeft() < c.scrollSensitivity ? d = a(document).scrollLeft(a(document).scrollLeft() - c.scrollSpeed) : a(window).width() - (b.pageX - a(document).scrollLeft()) < c.scrollSensitivity && (d = a(document).scrollLeft(a(document).scrollLeft() + c.scrollSpeed))), d !== !1 && a.ui.ddmanager && !c.dropBehaviour && a.ui.ddmanager.prepareOffsets(this, b)
            }
            this.positionAbs = this._convertPositionTo("absolute");
            if (!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left + "px";
            if (!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top + "px";
            for (var e = this.items.length - 1; e >= 0; e--) {
                var f = this.items[e],
                    g = f.item[0],
                    h = this._intersectsWithPointer(f);
                if (!h) continue;
                if (g != this.currentItem[0] && this.placeholder[h == 1 ? "next" : "prev"]()[0] != g && !a.contains(this.placeholder[0], g) && (this.options.type == "semi-dynamic" ? !a.contains(this.element[0], g) : !0)) {
                    this.direction = h == 1 ? "down" : "up";
                    if (this.options.tolerance != "pointer" && !this._intersectsWithSides(f)) break;
                    this._rearrange(b, f), this._trigger("change", b, this._uiHash());
                    break
                }
            }
            return this._contactContainers(b), a.ui.ddmanager && a.ui.ddmanager.drag(this, b), this._trigger("sort", b, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1
        },
        _mouseStop: function (b, c) {
            if (!b) return;
            a.ui.ddmanager && !this.options.dropBehaviour && a.ui.ddmanager.drop(this, b);
            if (this.options.revert) {
                var d = this,
                    e = this.placeholder.offset();
                this.reverting = !0, a(this.helper).animate({
                    left: e.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
                    top: e.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
                }, parseInt(this.options.revert, 10) || 500, function () {
                    d._clear(b)
                })
            } else this._clear(b, c);
            return !1
        },
        cancel: function () {
            if (this.dragging) {
                this._mouseUp({
                    target: null
                }), this.options.helper == "original" ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show();
                for (var b = this.containers.length - 1; b >= 0; b--) this.containers[b]._trigger("deactivate", null, this._uiHash(this)), this.containers[b].containerCache.over && (this.containers[b]._trigger("out", null, this._uiHash(this)), this.containers[b].containerCache.over = 0)
            }
            return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.options.helper != "original" && this.helper && this.helper[0].parentNode && this.helper.remove(), a.extend(this, {
                helper: null,
                dragging: !1,
                reverting: !1,
                _noFinalSort: null
            }), this.domPosition.prev ? a(this.domPosition.prev).after(this.currentItem) : a(this.domPosition.parent).prepend(this.currentItem)), this
        },
        serialize: function (b) {
            var c = this._getItemsAsjQuery(b && b.connected),
                d = [];
            return b = b || {}, a(c).each(function () {
                var c = (a(b.item || this).attr(b.attribute || "id") || "").match(b.expression || /(.+)[-=_](.+)/);
                c && d.push((b.key || c[1] + "[]") + "=" + (b.key && b.expression ? c[1] : c[2]))
            }), !d.length && b.key && d.push(b.key + "="), d.join("&")
        },
        toArray: function (b) {
            var c = this._getItemsAsjQuery(b && b.connected),
                d = [];
            return b = b || {}, c.each(function () {
                d.push(a(b.item || this).attr(b.attribute || "id") || "")
            }), d
        },
        _intersectsWith: function (a) {
            var b = this.positionAbs.left,
                c = b + this.helperProportions.width,
                d = this.positionAbs.top,
                e = d + this.helperProportions.height,
                f = a.left,
                g = f + a.width,
                h = a.top,
                i = h + a.height,
                j = this.offset.click.top,
                k = this.offset.click.left,
                l = d + j > h && d + j < i && b + k > f && b + k < g;
            return this.options.tolerance == "pointer" || this.options.forcePointerForContainers || this.options.tolerance != "pointer" && this.helperProportions[this.floating ? "width" : "height"] > a[this.floating ? "width" : "height"] ? l : f < b + this.helperProportions.width / 2 && c - this.helperProportions.width / 2 < g && h < d + this.helperProportions.height / 2 && e - this.helperProportions.height / 2 < i
        },
        _intersectsWithPointer: function (b) {
            var c = this.options.axis === "x" || a.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, b.top, b.height),
                d = this.options.axis === "y" || a.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, b.left, b.width),
                e = c && d,
                f = this._getDragVerticalDirection(),
                g = this._getDragHorizontalDirection();
            return e ? this.floating ? g && g == "right" || f == "down" ? 2 : 1 : f && (f == "down" ? 2 : 1) : !1
        },
        _intersectsWithSides: function (b) {
            var c = a.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, b.top + b.height / 2, b.height),
                d = a.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, b.left + b.width / 2, b.width),
                e = this._getDragVerticalDirection(),
                f = this._getDragHorizontalDirection();
            return this.floating && f ? f == "right" && d || f == "left" && !d : e && (e == "down" && c || e == "up" && !c)
        },
        _getDragVerticalDirection: function () {
            var a = this.positionAbs.top - this.lastPositionAbs.top;
            return a != 0 && (a > 0 ? "down" : "up")
        },
        _getDragHorizontalDirection: function () {
            var a = this.positionAbs.left - this.lastPositionAbs.left;
            return a != 0 && (a > 0 ? "right" : "left")
        },
        refresh: function (a) {
            return this._refreshItems(a), this.refreshPositions(), this
        },
        _connectWith: function () {
            var a = this.options;
            return a.connectWith.constructor == String ? [a.connectWith] : a.connectWith
        },
        _getItemsAsjQuery: function (b) {
            var c = [],
                d = [],
                e = this._connectWith();
            if (e && b) for (var f = e.length - 1; f >= 0; f--) {
                var g = a(e[f]);
                for (var h = g.length - 1; h >= 0; h--) {
                    var i = a.data(g[h], this.widgetName);
                    i && i != this && !i.options.disabled && d.push([a.isFunction(i.options.items) ? i.options.items.call(i.element) : a(i.options.items, i.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), i])
                }
            }
            d.push([a.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
                options: this.options,
                item: this.currentItem
            }) : a(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
            for (var f = d.length - 1; f >= 0; f--) d[f][0].each(function () {
                c.push(this)
            });
            return a(c)
        },
        _removeCurrentsFromItems: function () {
            var a = this.currentItem.find(":data(" + this.widgetName + "-item)");
            for (var b = 0; b < this.items.length; b++) for (var c = 0; c < a.length; c++) a[c] == this.items[b].item[0] && this.items.splice(b, 1)
        },
        _refreshItems: function (b) {
            this.items = [], this.containers = [this];
            var c = this.items,
                d = [
                    [a.isFunction(this.options.items) ? this.options.items.call(this.element[0], b, {
                        item: this.currentItem
                    }) : a(this.options.items, this.element), this]
                ],
                e = this._connectWith();
            if (e && this.ready) for (var f = e.length - 1; f >= 0; f--) {
                var g = a(e[f]);
                for (var h = g.length - 1; h >= 0; h--) {
                    var i = a.data(g[h], this.widgetName);
                    i && i != this && !i.options.disabled && (d.push([a.isFunction(i.options.items) ? i.options.items.call(i.element[0], b, {
                        item: this.currentItem
                    }) : a(i.options.items, i.element), i]), this.containers.push(i))
                }
            }
            for (var f = d.length - 1; f >= 0; f--) {
                var j = d[f][1],
                    k = d[f][0];
                for (var h = 0, l = k.length; h < l; h++) {
                    var m = a(k[h]);
                    m.data(this.widgetName + "-item", j), c.push({
                        item: m,
                        instance: j,
                        width: 0,
                        height: 0,
                        left: 0,
                        top: 0
                    })
                }
            }
        },
        refreshPositions: function (b) {
            this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset());
            for (var c = this.items.length - 1; c >= 0; c--) {
                var d = this.items[c];
                if (d.instance != this.currentContainer && this.currentContainer && d.item[0] != this.currentItem[0]) continue;
                var e = this.options.toleranceElement ? a(this.options.toleranceElement, d.item) : d.item;
                b || (d.width = e.outerWidth(), d.height = e.outerHeight());
                var f = e.offset();
                d.left = f.left, d.top = f.top
            }
            if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);
            else for (var c = this.containers.length - 1; c >= 0; c--) {
                var f = this.containers[c].element.offset();
                this.containers[c].containerCache.left = f.left, this.containers[c].containerCache.top = f.top, this.containers[c].containerCache.width = this.containers[c].element.outerWidth(), this.containers[c].containerCache.height = this.containers[c].element.outerHeight()
            }
            return this
        },
        _createPlaceholder: function (b) {
            b = b || this;
            var c = b.options;
            if (!c.placeholder || c.placeholder.constructor == String) {
                var d = c.placeholder;
                c.placeholder = {
                    element: function () {
                        var c = a(document.createElement(b.currentItem[0].nodeName)).addClass(d || b.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];
                        return d || (c.style.visibility = "hidden"), c
                    },
                    update: function (a, e) {
                        if (d && !c.forcePlaceholderSize) return;
                        e.height() || e.height(b.currentItem.innerHeight() - parseInt(b.currentItem.css("paddingTop") || 0, 10) - parseInt(b.currentItem.css("paddingBottom") || 0, 10)), e.width() || e.width(b.currentItem.innerWidth() - parseInt(b.currentItem.css("paddingLeft") || 0, 10) - parseInt(b.currentItem.css("paddingRight") || 0, 10))
                    }
                }
            }
            b.placeholder = a(c.placeholder.element.call(b.element, b.currentItem)), b.currentItem.after(b.placeholder), c.placeholder.update(b, b.placeholder)
        },
        _contactContainers: function (b) {
            var c = null,
                d = null;
            for (var e = this.containers.length - 1; e >= 0; e--) {
                if (a.contains(this.currentItem[0], this.containers[e].element[0])) continue;
                if (this._intersectsWith(this.containers[e].containerCache)) {
                    if (c && a.contains(this.containers[e].element[0], c.element[0])) continue;
                    c = this.containers[e], d = e
                } else this.containers[e].containerCache.over && (this.containers[e]._trigger("out", b, this._uiHash(this)), this.containers[e].containerCache.over = 0)
            }
            if (!c) return;
            if (this.containers.length === 1) this.containers[d]._trigger("over", b, this._uiHash(this)), this.containers[d].containerCache.over = 1;
            else if (this.currentContainer != this.containers[d]) {
                var f = 1e4,
                    g = null,
                    h = this.positionAbs[this.containers[d].floating ? "left" : "top"];
                for (var i = this.items.length - 1; i >= 0; i--) {
                    if (!a.contains(this.containers[d].element[0], this.items[i].item[0])) continue;
                    var j = this.containers[d].floating ? this.items[i].item.offset().left : this.items[i].item.offset().top;
                    Math.abs(j - h) < f && (f = Math.abs(j - h), g = this.items[i], this.direction = j - h > 0 ? "down" : "up")
                }
                if (!g && !this.options.dropOnEmpty) return;
                this.currentContainer = this.containers[d], g ? this._rearrange(b, g, null, !0) : this._rearrange(b, null, this.containers[d].element, !0), this._trigger("change", b, this._uiHash()), this.containers[d]._trigger("change", b, this._uiHash(this)), this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[d]._trigger("over", b, this._uiHash(this)), this.containers[d].containerCache.over = 1
            }
        },
        _createHelper: function (b) {
            var c = this.options,
                d = a.isFunction(c.helper) ? a(c.helper.apply(this.element[0], [b, this.currentItem])) : c.helper == "clone" ? this.currentItem.clone() : this.currentItem;
            return d.parents("body").length || a(c.appendTo != "parent" ? c.appendTo : this.currentItem[0].parentNode)[0].appendChild(d[0]), d[0] == this.currentItem[0] && (this._storedCSS = {
                width: this.currentItem[0].style.width,
                height: this.currentItem[0].style.height,
                position: this.currentItem.css("position"),
                top: this.currentItem.css("top"),
                left: this.currentItem.css("left")
            }), (d[0].style.width == "" || c.forceHelperSize) && d.width(this.currentItem.width()), (d[0].style.height == "" || c.forceHelperSize) && d.height(this.currentItem.height()), d
        },
        _adjustOffsetFromHelper: function (b) {
            typeof b == "string" && (b = b.split(" ")), a.isArray(b) && (b = {
                left: +b[0],
                top: +b[1] || 0
            }), "left" in b && (this.offset.click.left = b.left + this.margins.left), "right" in b && (this.offset.click.left = this.helperProportions.width - b.right + this.margins.left), "top" in b && (this.offset.click.top = b.top + this.margins.top), "bottom" in b && (this.offset.click.top = this.helperProportions.height - b.bottom + this.margins.top)
        },
        _getParentOffset: function () {
            this.offsetParent = this.helper.offsetParent();
            var b = this.offsetParent.offset();
            this.cssPosition == "absolute" && this.scrollParent[0] != document && a.contains(this.scrollParent[0], this.offsetParent[0]) && (b.left += this.scrollParent.scrollLeft(), b.top += this.scrollParent.scrollTop());
            if (this.offsetParent[0] == document.body || this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == "html" && a.browser.msie) b = {
                top: 0,
                left: 0
            };
            return {
                top: b.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: b.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function () {
            if (this.cssPosition == "relative") {
                var a = this.currentItem.position();
                return {
                    top: a.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                    left: a.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                }
            }
            return {
                top: 0,
                left: 0
            }
        },
        _cacheMargins: function () {
            this.margins = {
                left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
                top: parseInt(this.currentItem.css("marginTop"), 10) || 0
            }
        },
        _cacheHelperProportions: function () {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function () {
            var b = this.options;
            b.containment == "parent" && (b.containment = this.helper[0].parentNode);
            if (b.containment == "document" || b.containment == "window") this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, a(b.containment == "document" ? document : window).width() - this.helperProportions.width - this.margins.left, (a(b.containment == "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top];
            if (!/^(document|window|parent)$/.test(b.containment)) {
                var c = a(b.containment)[0],
                    d = a(b.containment).offset(),
                    e = a(c).css("overflow") != "hidden";
                this.containment = [d.left + (parseInt(a(c).css("borderLeftWidth"), 10) || 0) + (parseInt(a(c).css("paddingLeft"), 10) || 0) - this.margins.left, d.top + (parseInt(a(c).css("borderTopWidth"), 10) || 0) + (parseInt(a(c).css("paddingTop"), 10) || 0) - this.margins.top, d.left + (e ? Math.max(c.scrollWidth, c.offsetWidth) : c.offsetWidth) - (parseInt(a(c).css("borderLeftWidth"), 10) || 0) - (parseInt(a(c).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, d.top + (e ? Math.max(c.scrollHeight, c.offsetHeight) : c.offsetHeight) - (parseInt(a(c).css("borderTopWidth"), 10) || 0) - (parseInt(a(c).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top]
            }
        },
        _convertPositionTo: function (b, c) {
            c || (c = this.position);
            var d = b == "absolute" ? 1 : -1,
                e = this.options,
                f = this.cssPosition != "absolute" || this.scrollParent[0] != document && !! a.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                g = /(html|body)/i.test(f[0].tagName);
            return {
                top: c.top + this.offset.relative.top * d + this.offset.parent.top * d - (this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : g ? 0 : f.scrollTop()) * d,
                left: c.left + this.offset.relative.left * d + this.offset.parent.left * d - (this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : g ? 0 : f.scrollLeft()) * d
            }
        },
        _generatePosition: function (b) {
            var c = this.options,
                d = this.cssPosition != "absolute" || this.scrollParent[0] != document && !! a.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                e = /(html|body)/i.test(d[0].tagName);
            this.cssPosition == "relative" && (this.scrollParent[0] == document || this.scrollParent[0] == this.offsetParent[0]) && (this.offset.relative = this._getRelativeOffset());
            var f = b.pageX,
                g = b.pageY;
            if (this.originalPosition) {
                this.containment && (b.pageX - this.offset.click.left < this.containment[0] && (f = this.containment[0] + this.offset.click.left), b.pageY - this.offset.click.top < this.containment[1] && (g = this.containment[1] + this.offset.click.top), b.pageX - this.offset.click.left > this.containment[2] && (f = this.containment[2] + this.offset.click.left), b.pageY - this.offset.click.top > this.containment[3] && (g = this.containment[3] + this.offset.click.top));
                if (c.grid) {
                    var h = this.originalPageY + Math.round((g - this.originalPageY) / c.grid[1]) * c.grid[1];
                    g = this.containment ? h - this.offset.click.top < this.containment[1] || h - this.offset.click.top > this.containment[3] ? h - this.offset.click.top < this.containment[1] ? h + c.grid[1] : h - c.grid[1] : h : h;
                    var i = this.originalPageX + Math.round((f - this.originalPageX) / c.grid[0]) * c.grid[0];
                    f = this.containment ? i - this.offset.click.left < this.containment[0] || i - this.offset.click.left > this.containment[2] ? i - this.offset.click.left < this.containment[0] ? i + c.grid[0] : i - c.grid[0] : i : i
                }
            }
            return {
                top: g - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + (this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : e ? 0 : d.scrollTop()),
                left: f - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + (this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : e ? 0 : d.scrollLeft())
            }
        },
        _rearrange: function (a, b, c, d) {
            c ? c[0].appendChild(this.placeholder[0]) : b.item[0].parentNode.insertBefore(this.placeholder[0], this.direction == "down" ? b.item[0] : b.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;
            var e = this.counter;
            this._delay(function () {
                e == this.counter && this.refreshPositions(!d)
            })
        },
        _clear: function (b, c) {
            this.reverting = !1;
            var d = [];
            !this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null;
            if (this.helper[0] == this.currentItem[0]) {
                for (var e in this._storedCSS) if (this._storedCSS[e] == "auto" || this._storedCSS[e] == "static") this._storedCSS[e] = "";
                this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")
            } else this.currentItem.show();
            this.fromOutside && !c && d.push(function (a) {
                this._trigger("receive", a, this._uiHash(this.fromOutside))
            }), (this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !c && d.push(function (a) {
                this._trigger("update", a, this._uiHash())
            });
            if (!a.contains(this.element[0], this.currentItem[0])) {
                c || d.push(function (a) {
                    this._trigger("remove", a, this._uiHash())
                });
                for (var e = this.containers.length - 1; e >= 0; e--) a.contains(this.containers[e].element[0], this.currentItem[0]) && !c && (d.push(function (a) {
                    return function (b) {
                        a._trigger("receive", b, this._uiHash(this))
                    }
                }.call(this, this.containers[e])), d.push(function (a) {
                    return function (b) {
                        a._trigger("update", b, this._uiHash(this))
                    }
                }.call(this, this.containers[e])))
            }
            for (var e = this.containers.length - 1; e >= 0; e--) c || d.push(function (a) {
                return function (b) {
                    a._trigger("deactivate", b, this._uiHash(this))
                }
            }.call(this, this.containers[e])), this.containers[e].containerCache.over && (d.push(function (a) {
                return function (b) {
                    a._trigger("out", b, this._uiHash(this))
                }
            }.call(this, this.containers[e])), this.containers[e].containerCache.over = 0);
            this._storedCursor && a("body").css("cursor", this._storedCursor), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", this._storedZIndex == "auto" ? "" : this._storedZIndex), this.dragging = !1;
            if (this.cancelHelperRemoval) {
                if (!c) {
                    this._trigger("beforeStop", b, this._uiHash());
                    for (var e = 0; e < d.length; e++) d[e].call(this, b);
                    this._trigger("stop", b, this._uiHash())
                }
                return !1
            }
            c || this._trigger("beforeStop", b, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.helper[0] != this.currentItem[0] && this.helper.remove(), this.helper = null;
            if (!c) {
                for (var e = 0; e < d.length; e++) d[e].call(this, b);
                this._trigger("stop", b, this._uiHash())
            }
            return this.fromOutside = !1, !0
        },
        _trigger: function () {
            a.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel()
        },
        _uiHash: function (b) {
            var c = b || this;
            return {
                helper: c.helper,
                placeholder: c.placeholder || a([]),
                position: c.position,
                originalPosition: c.originalPosition,
                offset: c.positionAbs,
                item: c.currentItem,
                sender: b ? b.element : null
            }
        }
    })
}), define("jqueryui/button", ["jquery", "jqueryui/core", "jqueryui/widget"], function (a) {
    var b, c, d, e, f = "ui-button ui-widget ui-state-default ui-corner-all",
        g = "ui-state-hover ui-state-active ",
        h = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
        i = function () {
            var b = a(this).find(":ui-button");
            setTimeout(function () {
                b.button("refresh")
            }, 1)
        },
        j = function (b) {
            var c = b.name,
                d = b.form,
                e = a([]);
            return c && (d ? e = a(d).find("[name='" + c + "']") : e = a("[name='" + c + "']", b.ownerDocument).filter(function () {
                return !this.form
            })), e
        };
    a.widget("ui.button", {
        version: "@VERSION",
        defaultElement: "<button>",
        options: {
            disabled: null,
            text: !0,
            label: null,
            icons: {
                primary: null,
                secondary: null
            }
        },
        _create: function () {
            this.element.closest("form").unbind("reset" + this.eventNamespace).bind("reset" + this.eventNamespace, i), typeof this.options.disabled != "boolean" ? this.options.disabled = !! this.element.prop("disabled") : this.element.prop("disabled", this.options.disabled), this._determineButtonType(), this.hasTitle = !! this.buttonElement.attr("title");
            var g = this,
                h = this.options,
                k = this.type === "checkbox" || this.type === "radio",
                l = "ui-state-hover" + (k ? "" : " ui-state-active"),
                m = "ui-state-focus";
            h.label === null && (h.label = this.type === "input" ? this.buttonElement.val() : this.buttonElement.html()), this.buttonElement.addClass(f).attr("role", "button").bind("mouseenter" + this.eventNamespace, function () {
                if (h.disabled) return;
                a(this).addClass("ui-state-hover"), this === b && a(this).addClass("ui-state-active")
            }).bind("mouseleave" + this.eventNamespace, function () {
                if (h.disabled) return;
                a(this).removeClass(l)
            }).bind("click" + this.eventNamespace, function (a) {
                h.disabled && (a.preventDefault(), a.stopImmediatePropagation())
            }), this.element.bind("focus" + this.eventNamespace, function () {
                g.buttonElement.addClass(m)
            }).bind("blur" + this.eventNamespace, function () {
                g.buttonElement.removeClass(m)
            }), k && (this.element.bind("change" + this.eventNamespace, function () {
                if (e) return;
                g.refresh()
            }), this.buttonElement.bind("mousedown" + this.eventNamespace, function (a) {
                if (h.disabled) return;
                e = !1, c = a.pageX, d = a.pageY
            }).bind("mouseup" + this.eventNamespace, function (a) {
                if (h.disabled) return;
                if (c !== a.pageX || d !== a.pageY) e = !0
            })), this.type === "checkbox" ? this.buttonElement.bind("click" + this.eventNamespace, function () {
                if (h.disabled || e) return !1;
                a(this).toggleClass("ui-state-active"), g.buttonElement.attr("aria-pressed", g.element[0].checked)
            }) : this.type === "radio" ? this.buttonElement.bind("click" + this.eventNamespace, function () {
                if (h.disabled || e) return !1;
                a(this).addClass("ui-state-active"), g.buttonElement.attr("aria-pressed", "true");
                var b = g.element[0];
                j(b).not(b).map(function () {
                    return a(this).button("widget")[0]
                }).removeClass("ui-state-active").attr("aria-pressed", "false")
            }) : (this.buttonElement.bind("mousedown" + this.eventNamespace, function () {
                if (h.disabled) return !1;
                a(this).addClass("ui-state-active"), b = this, g.document.one("mouseup", function () {
                    b = null
                })
            }).bind("mouseup" + this.eventNamespace, function () {
                if (h.disabled) return !1;
                a(this).removeClass("ui-state-active")
            }).bind("keydown" + this.eventNamespace, function (b) {
                if (h.disabled) return !1;
                (b.keyCode === a.ui.keyCode.SPACE || b.keyCode === a.ui.keyCode.ENTER) && a(this).addClass("ui-state-active")
            }).bind("keyup" + this.eventNamespace, function () {
                a(this).removeClass("ui-state-active")
            }), this.buttonElement.is("a") && this.buttonElement.keyup(function (b) {
                b.keyCode === a.ui.keyCode.SPACE && a(this).click()
            })), this._setOption("disabled", h.disabled), this._resetButton()
        },
        _determineButtonType: function () {
            var a, b, c;
            this.element.is("[type=checkbox]") ? this.type = "checkbox" : this.element.is("[type=radio]") ? this.type = "radio" : this.element.is("input") ? this.type = "input" : this.type = "button", this.type === "checkbox" || this.type === "radio" ? (a = this.element.parents().last(), b = "label[for='" + this.element.attr("id") + "']", this.buttonElement = a.find(b), this.buttonElement.length || (a = a.length ? a.siblings() : this.element.siblings(), this.buttonElement = a.filter(b), this.buttonElement.length || (this.buttonElement = a.find(b))), this.element.addClass("ui-helper-hidden-accessible"), c = this.element.is(":checked"), c && this.buttonElement.addClass("ui-state-active"), this.buttonElement.prop("aria-pressed", c)) : this.buttonElement = this.element
        },
        widget: function () {
            return this.buttonElement
        },
        _destroy: function () {
            this.element.removeClass("ui-helper-hidden-accessible"), this.buttonElement.removeClass(f + " " + g + " " + h).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()), this.hasTitle || this.buttonElement.removeAttr("title")
        },
        _setOption: function (a, b) {
            this._super(a, b);
            if (a === "disabled") {
                b ? this.element.prop("disabled", !0) : this.element.prop("disabled", !1);
                return
            }
            this._resetButton()
        },
        refresh: function () {
            var b = this.element.is(":disabled");
            b !== this.options.disabled && this._setOption("disabled", b), this.type === "radio" ? j(this.element[0]).each(function () {
                a(this).is(":checked") ? a(this).button("widget").addClass("ui-state-active").attr("aria-pressed", "true") : a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed", "false")
            }) : this.type === "checkbox" && (this.element.is(":checked") ? this.buttonElement.addClass("ui-state-active").attr("aria-pressed", "true") : this.buttonElement.removeClass("ui-state-active").attr("aria-pressed", "false"))
        },
        _resetButton: function () {
            if (this.type === "input") {
                this.options.label && this.element.val(this.options.label);
                return
            }
            var b = this.buttonElement.removeClass(h),
                c = a("<span></span>", this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),
                d = this.options.icons,
                e = d.primary && d.secondary,
                f = [];
            d.primary || d.secondary ? (this.options.text && f.push("ui-button-text-icon" + (e ? "s" : d.primary ? "-primary" : "-secondary")), d.primary && b.prepend("<span class='ui-button-icon-primary ui-icon " + d.primary + "'></span>"), d.secondary && b.append("<span class='ui-button-icon-secondary ui-icon " + d.secondary + "'></span>"), this.options.text || (f.push(e ? "ui-button-icons-only" : "ui-button-icon-only"), this.hasTitle || b.attr("title", a.trim(c)))) : f.push("ui-button-text-only"), b.addClass(f.join(" "))
        }
    }), a.widget("ui.buttonset", {
        version: "@VERSION",
        options: {
            items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(button)"
        },
        _create: function () {
            this.element.addClass("ui-buttonset")
        },
        _init: function () {
            this.refresh()
        },
        _setOption: function (a, b) {
            a === "disabled" && this.buttons.button("option", a, b), this._super(a, b)
        },
        refresh: function () {
            var b = this.element.css("direction") === "rtl";
            this.buttons = this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function () {
                return a(this).button("widget")[0]
            }).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b ? "ui-corner-right" : "ui-corner-left").end().filter(":last").addClass(b ? "ui-corner-left" : "ui-corner-right").end().end()
        },
        _destroy: function () {
            this.element.removeClass("ui-buttonset"), this.buttons.map(function () {
                return a(this).button("widget")[0]
            }).removeClass("ui-corner-left ui-corner-right").end().button("destroy")
        }
    })
}), define("jqueryui/draggable-unpatched", ["jquery", "jqueryui/core", "jqueryui/mouse", "jqueryui/widget"], function (a) {
    a.widget("ui.draggable", a.ui.mouse, {
        version: "@VERSION",
        widgetEventPrefix: "drag",
        options: {
            addClasses: !0,
            appendTo: "parent",
            axis: !1,
            connectToSortable: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            iframeFix: !1,
            opacity: !1,
            refreshPositions: !1,
            revert: !1,
            revertDuration: 500,
            scope: "default",
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            snap: !1,
            snapMode: "both",
            snapTolerance: 20,
            stack: !1,
            zIndex: !1
        },
        _create: function () {
            this.options.helper == "original" && !/^(?:r|a|f)/.test(this.element.css("position")) && (this.element[0].style.position = "relative"), this.options.addClasses && this.element.addClass("ui-draggable"), this.options.disabled && this.element.addClass("ui-draggable-disabled"), this._mouseInit()
        },
        _destroy: function () {
            this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"), this._mouseDestroy()
        },
        _mouseCapture: function (b) {
            var c = this.options;
            return this.helper || c.disabled || a(b.target).is(".ui-resizable-handle") ? !1 : (this.handle = this._getHandle(b), this.handle ? (a(c.iframeFix === !0 ? "iframe" : c.iframeFix).each(function () {
                a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({
                    width: this.offsetWidth + "px",
                    height: this.offsetHeight + "px",
                    position: "absolute",
                    opacity: "0.001",
                    zIndex: 1e3
                }).css(a(this).offset()).appendTo("body")
            }), !0) : !1)
        },
        _mouseStart: function (b) {
            var c = this.options;
            return this.helper = this._createHelper(b), this.helper.addClass("ui-draggable-dragging"), this._cacheHelperProportions(), a.ui.ddmanager && (a.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this.scrollParent = this.helper.scrollParent(), this.offset = this.positionAbs = this.element.offset(), this.offset = {
                top: this.offset.top - this.margins.top,
                left: this.offset.left - this.margins.left
            }, a.extend(this.offset, {
                click: {
                    left: b.pageX - this.offset.left,
                    top: b.pageY - this.offset.top
                },
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }), this.originalPosition = this.position = this._generatePosition(b), this.originalPageX = b.pageX, this.originalPageY = b.pageY, c.cursorAt && this._adjustOffsetFromHelper(c.cursorAt), c.containment && this._setContainment(), this._trigger("start", b) === !1 ? (this._clear(), !1) : (this._cacheHelperProportions(), a.ui.ddmanager && !c.dropBehaviour && a.ui.ddmanager.prepareOffsets(this, b), this._mouseDrag(b, !0), a.ui.ddmanager && a.ui.ddmanager.dragStart(this, b), !0)
        },
        _mouseDrag: function (b, c) {
            this.position = this._generatePosition(b), this.positionAbs = this._convertPositionTo("absolute");
            if (!c) {
                var d = this._uiHash();
                if (this._trigger("drag", b, d) === !1) return this._mouseUp({}), !1;
                this.position = d.position
            }
            if (!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left + "px";
            if (!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top + "px";
            return a.ui.ddmanager && a.ui.ddmanager.drag(this, b), !1
        },
        _mouseStop: function (b) {
            var c = !1;
            a.ui.ddmanager && !this.options.dropBehaviour && (c = a.ui.ddmanager.drop(this, b)), this.dropped && (c = this.dropped, this.dropped = !1);
            var d = this.element[0],
                e = !1;
            while (d && (d = d.parentNode)) d == document && (e = !0);
            if (!e && this.options.helper === "original") return !1;
            if (this.options.revert == "invalid" && !c || this.options.revert == "valid" && c || this.options.revert === !0 || a.isFunction(this.options.revert) && this.options.revert.call(this.element, c)) {
                var f = this;
                a(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function () {
                    f._trigger("stop", b) !== !1 && f._clear()
                })
            } else this._trigger("stop", b) !== !1 && this._clear();
            return !1
        },
        _mouseUp: function (b) {
            return this.options.iframeFix === !0 && a("div.ui-draggable-iframeFix").each(function () {
                this.parentNode.removeChild(this)
            }), a.ui.ddmanager && a.ui.ddmanager.dragStop(this, b), a.ui.mouse.prototype._mouseUp.call(this, b)
        },
        cancel: function () {
            return this.helper.is(".ui-draggable-dragging") ? this._mouseUp({}) : this._clear(), this
        },
        _getHandle: function (b) {
            var c = !this.options.handle || !a(this.options.handle, this.element).length ? !0 : !1;
            return a(this.options.handle, this.element).find("*").andSelf().each(function () {
                this == b.target && (c = !0)
            }), c
        },
        _createHelper: function (b) {
            var c = this.options,
                d = a.isFunction(c.helper) ? a(c.helper.apply(this.element[0], [b])) : c.helper == "clone" ? this.element.clone().removeAttr("id") : this.element;
            return d.parents("body").length || d.appendTo(c.appendTo == "parent" ? this.element[0].parentNode : c.appendTo), d[0] != this.element[0] && !/(fixed|absolute)/.test(d.css("position")) && d.css("position", "absolute"), d
        },
        _adjustOffsetFromHelper: function (b) {
            typeof b == "string" && (b = b.split(" ")), a.isArray(b) && (b = {
                left: +b[0],
                top: +b[1] || 0
            }), "left" in b && (this.offset.click.left = b.left + this.margins.left), "right" in b && (this.offset.click.left = this.helperProportions.width - b.right + this.margins.left), "top" in b && (this.offset.click.top = b.top + this.margins.top), "bottom" in b && (this.offset.click.top = this.helperProportions.height - b.bottom + this.margins.top)
        },
        _getParentOffset: function () {
            this.offsetParent = this.helper.offsetParent();
            var b = this.offsetParent.offset();
            this.cssPosition == "absolute" && this.scrollParent[0] != document && a.contains(this.scrollParent[0], this.offsetParent[0]) && (b.left += this.scrollParent.scrollLeft(), b.top += this.scrollParent.scrollTop());
            if (this.offsetParent[0] == document.body || this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == "html" && a.browser.msie) b = {
                top: 0,
                left: 0
            };
            return {
                top: b.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: b.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function () {
            if (this.cssPosition == "relative") {
                var a = this.element.position();
                return {
                    top: a.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                    left: a.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                }
            }
            return {
                top: 0,
                left: 0
            }
        },
        _cacheMargins: function () {
            this.margins = {
                left: parseInt(this.element.css("marginLeft"), 10) || 0,
                top: parseInt(this.element.css("marginTop"), 10) || 0,
                right: parseInt(this.element.css("marginRight"), 10) || 0,
                bottom: parseInt(this.element.css("marginBottom"), 10) || 0
            }
        },
        _cacheHelperProportions: function () {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function () {
            var b = this.options;
            b.containment == "parent" && (b.containment = this.helper[0].parentNode);
            if (b.containment == "document" || b.containment == "window") this.containment = [b.containment == "document" ? 0 : a(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, b.containment == "document" ? 0 : a(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, (b.containment == "document" ? 0 : a(window).scrollLeft()) + a(b.containment == "document" ? document : window).width() - this.helperProportions.width - this.margins.left, (b.containment == "document" ? 0 : a(window).scrollTop()) + (a(b.containment == "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top];
            if (!/^(document|window|parent)$/.test(b.containment) && b.containment.constructor != Array) {
                var c = a(b.containment),
                    d = c[0];
                if (!d) return;
                var e = c.offset(),
                    f = a(d).css("overflow") != "hidden";
                this.containment = [(parseInt(a(d).css("borderLeftWidth"), 10) || 0) + (parseInt(a(d).css("paddingLeft"), 10) || 0), (parseInt(a(d).css("borderTopWidth"), 10) || 0) + (parseInt(a(d).css("paddingTop"), 10) || 0), (f ? Math.max(d.scrollWidth, d.offsetWidth) : d.offsetWidth) - (parseInt(a(d).css("borderLeftWidth"), 10) || 0) - (parseInt(a(d).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (f ? Math.max(d.scrollHeight, d.offsetHeight) : d.offsetHeight) - (parseInt(a(d).css("borderTopWidth"), 10) || 0) - (parseInt(a(d).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom], this.relative_container = c
            } else b.containment.constructor == Array && (this.containment = b.containment)
        },
        _convertPositionTo: function (b, c) {
            c || (c = this.position);
            var d = b == "absolute" ? 1 : -1,
                e = this.options,
                f = this.cssPosition != "absolute" || this.scrollParent[0] != document && !! a.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                g = /(html|body)/i.test(f[0].tagName);
            return {
                top: c.top + this.offset.relative.top * d + this.offset.parent.top * d - (this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : g ? 0 : f.scrollTop()) * d,
                left: c.left + this.offset.relative.left * d + this.offset.parent.left * d - (this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : g ? 0 : f.scrollLeft()) * d
            }
        },
        _generatePosition: function (b) {
            var c = this.options,
                d = this.cssPosition != "absolute" || this.scrollParent[0] != document && !! a.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                e = /(html|body)/i.test(d[0].tagName),
                f = b.pageX,
                g = b.pageY;
            if (this.originalPosition) {
                var h;
                if (this.containment) {
                    if (this.relative_container) {
                        var i = this.relative_container.offset();
                        h = [this.containment[0] + i.left, this.containment[1] + i.top, this.containment[2] + i.left, this.containment[3] + i.top]
                    } else h = this.containment;
                    b.pageX - this.offset.click.left < h[0] && (f = h[0] + this.offset.click.left), b.pageY - this.offset.click.top < h[1] && (g = h[1] + this.offset.click.top), b.pageX - this.offset.click.left > h[2] && (f = h[2] + this.offset.click.left), b.pageY - this.offset.click.top > h[3] && (g = h[3] + this.offset.click.top)
                }
                if (c.grid) {
                    var j = c.grid[1] ? this.originalPageY + Math.round((g - this.originalPageY) / c.grid[1]) * c.grid[1] : this.originalPageY;
                    g = h ? j - this.offset.click.top < h[1] || j - this.offset.click.top > h[3] ? j - this.offset.click.top < h[1] ? j + c.grid[1] : j - c.grid[1] : j : j;
                    var k = c.grid[0] ? this.originalPageX + Math.round((f - this.originalPageX) / c.grid[0]) * c.grid[0] : this.originalPageX;
                    f = h ? k - this.offset.click.left < h[0] || k - this.offset.click.left > h[2] ? k - this.offset.click.left < h[0] ? k + c.grid[0] : k - c.grid[0] : k : k
                }
            }
            return {
                top: g - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + (this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : e ? 0 : d.scrollTop()),
                left: f - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + (this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : e ? 0 : d.scrollLeft())
            }
        },
        _clear: function () {
            this.helper.removeClass("ui-draggable-dragging"), this.helper[0] != this.element[0] && !this.cancelHelperRemoval && this.helper.remove(), this.helper = null, this.cancelHelperRemoval = !1
        },
        _trigger: function (b, c, d) {
            return d = d || this._uiHash(), a.ui.plugin.call(this, b, [c, d]), b == "drag" && (this.positionAbs = this._convertPositionTo("absolute")), a.Widget.prototype._trigger.call(this, b, c, d)
        },
        plugins: {},
        _uiHash: function (a) {
            return {
                helper: this.helper,
                position: this.position,
                originalPosition: this.originalPosition,
                offset: this.positionAbs
            }
        }
    }), a.ui.plugin.add("draggable", "connectToSortable", {
        start: function (b, c) {
            var d = a(this).data("draggable"),
                e = d.options,
                f = a.extend({}, c, {
                    item: d.element
                });
            d.sortables = [], a(e.connectToSortable).each(function () {
                var c = a.data(this, "sortable");
                c && !c.options.disabled && (d.sortables.push({
                    instance: c,
                    shouldRevert: c.options.revert
                }), c.refreshPositions(), c._trigger("activate", b, f))
            })
        },
        stop: function (b, c) {
            var d = a(this).data("draggable"),
                e = a.extend({}, c, {
                    item: d.element
                });
            a.each(d.sortables, function () {
                this.instance.isOver ? (this.instance.isOver = 0, d.cancelHelperRemoval = !0, this.instance.cancelHelperRemoval = !1, this.shouldRevert && (this.instance.options.revert = !0), this.instance._mouseStop(b), this.instance.options.helper = this.instance.options._helper, d.options.helper == "original" && this.instance.currentItem.css({
                    top: "auto",
                    left: "auto"
                })) : (this.instance.cancelHelperRemoval = !1, this.instance._trigger("deactivate", b, e))
            })
        },
        drag: function (b, c) {
            var d = a(this).data("draggable"),
                e = this,
                f = function (b) {
                    var c = this.offset.click.top,
                        d = this.offset.click.left,
                        e = this.positionAbs.top,
                        f = this.positionAbs.left,
                        g = b.height,
                        h = b.width,
                        i = b.top,
                        j = b.left;
                    return a.ui.isOver(e + c, f + d, i, j, g, h)
                };
            a.each(d.sortables, function (f) {
                this.instance.positionAbs = d.positionAbs, this.instance.helperProportions = d.helperProportions, this.instance.offset.click = d.offset.click, this.instance._intersectsWith(this.instance.containerCache) ? (this.instance.isOver || (this.instance.isOver = 1, this.instance.currentItem = a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item", !0), this.instance.options._helper = this.instance.options.helper, this.instance.options.helper = function () {
                    return c.helper[0]
                }, b.target = this.instance.currentItem[0], this.instance._mouseCapture(b, !0), this.instance._mouseStart(b, !0, !0), this.instance.offset.click.top = d.offset.click.top, this.instance.offset.click.left = d.offset.click.left, this.instance.offset.parent.left -= d.offset.parent.left - this.instance.offset.parent.left, this.instance.offset.parent.top -= d.offset.parent.top - this.instance.offset.parent.top, d._trigger("toSortable", b), d.dropped = this.instance.element, d.currentItem = d.element, this.instance.fromOutside = d), this.instance.currentItem && this.instance._mouseDrag(b)) : this.instance.isOver && (this.instance.isOver = 0, this.instance.cancelHelperRemoval = !0, this.instance.options.revert = !1, this.instance._trigger("out", b, this.instance._uiHash(this.instance)), this.instance._mouseStop(b, !0), this.instance.options.helper = this.instance.options._helper, this.instance.currentItem.remove(), this.instance.placeholder && this.instance.placeholder.remove(), d._trigger("fromSortable", b), d.dropped = !1)
            })
        }
    }), a.ui.plugin.add("draggable", "cursor", {
        start: function (b, c) {
            var d = a("body"),
                e = a(this).data("draggable").options;
            d.css("cursor") && (e._cursor = d.css("cursor")), d.css("cursor", e.cursor)
        },
        stop: function (b, c) {
            var d = a(this).data("draggable").options;
            d._cursor && a("body").css("cursor", d._cursor)
        }
    }), a.ui.plugin.add("draggable", "opacity", {
        start: function (b, c) {
            var d = a(c.helper),
                e = a(this).data("draggable").options;
            d.css("opacity") && (e._opacity = d.css("opacity")), d.css("opacity", e.opacity)
        },
        stop: function (b, c) {
            var d = a(this).data("draggable").options;
            d._opacity && a(c.helper).css("opacity", d._opacity)
        }
    }), a.ui.plugin.add("draggable", "scroll", {
        start: function (b, c) {
            var d = a(this).data("draggable");
            d.scrollParent[0] != document && d.scrollParent[0].tagName != "HTML" && (d.overflowOffset = d.scrollParent.offset())
        },
        drag: function (b, c) {
            var d = a(this).data("draggable"),
                e = d.options,
                f = !1;
            if (d.scrollParent[0] != document && d.scrollParent[0].tagName != "HTML") {
                if (!e.axis || e.axis != "x") d.overflowOffset.top + d.scrollParent[0].offsetHeight - b.pageY < e.scrollSensitivity ? d.scrollParent[0].scrollTop = f = d.scrollParent[0].scrollTop + e.scrollSpeed : b.pageY - d.overflowOffset.top < e.scrollSensitivity && (d.scrollParent[0].scrollTop = f = d.scrollParent[0].scrollTop - e.scrollSpeed);
                if (!e.axis || e.axis != "y") d.overflowOffset.left + d.scrollParent[0].offsetWidth - b.pageX < e.scrollSensitivity ? d.scrollParent[0].scrollLeft = f = d.scrollParent[0].scrollLeft + e.scrollSpeed : b.pageX - d.overflowOffset.left < e.scrollSensitivity && (d.scrollParent[0].scrollLeft = f = d.scrollParent[0].scrollLeft - e.scrollSpeed)
            } else {
                if (!e.axis || e.axis != "x") b.pageY - a(document).scrollTop() < e.scrollSensitivity ? f = a(document).scrollTop(a(document).scrollTop() - e.scrollSpeed) : a(window).height() - (b.pageY - a(document).scrollTop()) < e.scrollSensitivity && (f = a(document).scrollTop(a(document).scrollTop() + e.scrollSpeed));
                if (!e.axis || e.axis != "y") b.pageX - a(document).scrollLeft() < e.scrollSensitivity ? f = a(document).scrollLeft(a(document).scrollLeft() - e.scrollSpeed) : a(window).width() - (b.pageX - a(document).scrollLeft()) < e.scrollSensitivity && (f = a(document).scrollLeft(a(document).scrollLeft() + e.scrollSpeed))
            }
            f !== !1 && a.ui.ddmanager && !e.dropBehaviour && a.ui.ddmanager.prepareOffsets(d, b)
        }
    }), a.ui.plugin.add("draggable", "snap", {
        start: function (b, c) {
            var d = a(this).data("draggable"),
                e = d.options;
            d.snapElements = [], a(e.snap.constructor != String ? e.snap.items || ":data(draggable)" : e.snap).each(function () {
                var b = a(this),
                    c = b.offset();
                this != d.element[0] && d.snapElements.push({
                    item: this,
                    width: b.outerWidth(),
                    height: b.outerHeight(),
                    top: c.top,
                    left: c.left
                })
            })
        },
        drag: function (b, c) {
            var d = a(this).data("draggable"),
                e = d.options,
                f = e.snapTolerance,
                g = c.offset.left,
                h = g + d.helperProportions.width,
                i = c.offset.top,
                j = i + d.helperProportions.height;
            for (var k = d.snapElements.length - 1; k >= 0; k--) {
                var l = d.snapElements[k].left,
                    m = l + d.snapElements[k].width,
                    n = d.snapElements[k].top,
                    o = n + d.snapElements[k].height;
                if (!(l - f < g && g < m + f && n - f < i && i < o + f || l - f < g && g < m + f && n - f < j && j < o + f || l - f < h && h < m + f && n - f < i && i < o + f || l - f < h && h < m + f && n - f < j && j < o + f)) {
                    d.snapElements[k].snapping && d.options.snap.release && d.options.snap.release.call(d.element, b, a.extend(d._uiHash(), {
                        snapItem: d.snapElements[k].item
                    })), d.snapElements[k].snapping = !1;
                    continue
                }
                if (e.snapMode != "inner") {
                    var p = Math.abs(n - j) <= f,
                        q = Math.abs(o - i) <= f,
                        r = Math.abs(l - h) <= f,
                        s = Math.abs(m - g) <= f;
                    p && (c.position.top = d._convertPositionTo("relative", {
                        top: n - d.helperProportions.height,
                        left: 0
                    }).top - d.margins.top), q && (c.position.top = d._convertPositionTo("relative", {
                        top: o,
                        left: 0
                    }).top - d.margins.top), r && (c.position.left = d._convertPositionTo("relative", {
                        top: 0,
                        left: l - d.helperProportions.width
                    }).left - d.margins.left), s && (c.position.left = d._convertPositionTo("relative", {
                        top: 0,
                        left: m
                    }).left - d.margins.left)
                }
                var t = p || q || r || s;
                if (e.snapMode != "outer") {
                    var p = Math.abs(n - i) <= f,
                        q = Math.abs(o - j) <= f,
                        r = Math.abs(l - g) <= f,
                        s = Math.abs(m - h) <= f;
                    p && (c.position.top = d._convertPositionTo("relative", {
                        top: n,
                        left: 0
                    }).top - d.margins.top), q && (c.position.top = d._convertPositionTo("relative", {
                        top: o - d.helperProportions.height,
                        left: 0
                    }).top - d.margins.top), r && (c.position.left = d._convertPositionTo("relative", {
                        top: 0,
                        left: l
                    }).left - d.margins.left), s && (c.position.left = d._convertPositionTo("relative", {
                        top: 0,
                        left: m - d.helperProportions.width
                    }).left - d.margins.left)
                }!d.snapElements[k].snapping && (p || q || r || s || t) && d.options.snap.snap && d.options.snap.snap.call(d.element, b, a.extend(d._uiHash(), {
                    snapItem: d.snapElements[k].item
                })), d.snapElements[k].snapping = p || q || r || s || t
            }
        }
    }), a.ui.plugin.add("draggable", "stack", {
        start: function (b, c) {
            var d = a(this).data("draggable").options,
                e = a.makeArray(a(d.stack)).sort(function (b, c) {
                    return (parseInt(a(b).css("zIndex"), 10) || 0) - (parseInt(a(c).css("zIndex"), 10) || 0)
                });
            if (!e.length) return;
            var f = parseInt(e[0].style.zIndex) || 0;
            a(e).each(function (a) {
                this.style.zIndex = f + a
            }), this[0].style.zIndex = f + e.length
        }
    }), a.ui.plugin.add("draggable", "zIndex", {
        start: function (b, c) {
            var d = a(c.helper),
                e = a(this).data("draggable").options;
            d.css("zIndex") && (e._zIndex = d.css("zIndex")), d.css("zIndex", e.zIndex)
        },
        stop: function (b, c) {
            var d = a(this).data("draggable").options;
            d._zIndex && a(c.helper).css("zIndex", d._zIndex)
        }
    })
}), define("vendor/jquery.ui.touch-punch", ["jquery", "jqueryui/draggable-unpatched"], function (a) {
    function e(a, b) {
        if (a.originalEvent.touches.length > 1) return;
        a.preventDefault();
        var c = a.originalEvent.changedTouches[0],
            d = document.createEvent("MouseEvents");
        d.initMouseEvent(b, !0, !0, window, 1, c.screenX, c.screenY, c.clientX, c.clientY, !1, !1, !1, !1, 0, null), a.target.dispatchEvent(d)
    }
    a.support.touch = "ontouchend" in document;
    if (!a.support.touch) return;
    var b = a.ui.mouse.prototype,
        c = b._mouseInit,
        d;
    b._touchStart = function (a) {
        var b = this;
        if (d || !b._mouseCapture(a.originalEvent.changedTouches[0])) return;
        d = !0, b._touchMoved = !1, e(a, "mouseover"), e(a, "mousemove"), e(a, "mousedown")
    }, b._touchMove = function (a) {
        if (!d) return;
        this._touchMoved = !0, e(a, "mousemove")
    }, b._touchEnd = function (a) {
        if (!d) return;
        e(a, "mouseup"), e(a, "mouseout"), this._touchMoved || e(a, "click"), d = !1
    }, b._mouseInit = function () {
        var b = this;
        b.element.bind("touchstart", a.proxy(b, "_touchStart")).bind("touchmove", a.proxy(b, "_touchMove")).bind("touchend", a.proxy(b, "_touchEnd")), c.call(b)
    }
}), define("jqueryui/draggable", ["jqueryui/draggable-unpatched", "vendor/jquery.ui.touch-punch"], function (a) {
    return a
}), define("jqueryui/position", ["jquery"], function (a) {
    function l(a, b, c) {
        return [parseInt(a[0], 10) * (j.test(a[0]) ? b / 100 : 1), parseInt(a[1], 10) * (j.test(a[1]) ? c / 100 : 1)]
    }
    function m(b, c) {
        return parseInt(a.css(b, c), 10) || 0
    }
    a.ui = a.ui || {};
    var b, c = Math.max,
        d = Math.abs,
        e = Math.round,
        f = /left|center|right/,
        g = /top|center|bottom/,
        h = /[\+\-]\d+%?/,
        i = /^\w+/,
        j = /%$/,
        k = a.fn.position;
    a.position = {
        scrollbarWidth: function () {
            if (b !== undefined) return b;
            var c, d, e = a("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),
                f = e.children()[0];
            return a("body").append(e), c = f.offsetWidth, e.css("overflow", "scroll"), d = f.offsetWidth, c === d && (d = e[0].clientWidth), e.remove(), b = c - d
        },
        getScrollInfo: function (b) {
            var c = b.isWindow ? "" : b.element.css("overflow-x"),
                d = b.isWindow ? "" : b.element.css("overflow-y"),
                e = c === "scroll" || c === "auto" && b.width < b.element[0].scrollWidth,
                f = d === "scroll" || d === "auto" && b.height < b.element[0].scrollHeight;
            return {
                width: e ? a.position.scrollbarWidth() : 0,
                height: f ? a.position.scrollbarWidth() : 0
            }
        },
        getWithinInfo: function (b) {
            var c = a(b || window),
                d = a.isWindow(c[0]);
            return {
                element: c,
                isWindow: d,
                offset: c.offset() || {
                    left: 0,
                    top: 0
                },
                scrollLeft: c.scrollLeft(),
                scrollTop: c.scrollTop(),
                width: d ? c.width() : c.outerWidth(),
                height: d ? c.height() : c.outerHeight()
            }
        }
    }, a.fn.position = function (b) {
        if (!b || !b.of) return k.apply(this, arguments);
        b = a.extend({}, b);
        var c, j, n, o, p, q = a(b.of),
            r = a.position.getWithinInfo(b.within),
            s = a.position.getScrollInfo(r),
            t = q[0],
            u = (b.collision || "flip").split(" "),
            v = {};
        return t.nodeType === 9 ? (j = q.width(), n = q.height(), o = {
            top: 0,
            left: 0
        }) : a.isWindow(t) ? (j = q.width(), n = q.height(), o = {
            top: q.scrollTop(),
            left: q.scrollLeft()
        }) : t.preventDefault ? (b.at = "left top", j = n = 0, o = {
            top: t.pageY,
            left: t.pageX
        }) : (j = q.outerWidth(), n = q.outerHeight(), o = q.offset()), p = a.extend({}, o), a.each(["my", "at"], function () {
            var a = (b[this] || "").split(" "),
                c, d;
            a.length === 1 && (a = f.test(a[0]) ? a.concat(["center"]) : g.test(a[0]) ? ["center"].concat(a) : ["center", "center"]), a[0] = f.test(a[0]) ? a[0] : "center", a[1] = g.test(a[1]) ? a[1] : "center", c = h.exec(a[0]), d = h.exec(a[1]), v[this] = [c ? c[0] : 0, d ? d[0] : 0], b[this] = [i.exec(a[0])[0], i.exec(a[1])[0]]
        }), u.length === 1 && (u[1] = u[0]), b.at[0] === "right" ? p.left += j : b.at[0] === "center" && (p.left += j / 2), b.at[1] === "bottom" ? p.top += n : b.at[1] === "center" && (p.top += n / 2), c = l(v.at, j, n), p.left += c[0], p.top += c[1], this.each(function () {
            var f, g, h = a(this),
                i = h.outerWidth(),
                k = h.outerHeight(),
                t = m(this, "marginLeft"),
                w = m(this, "marginTop"),
                x = i + t + m(this, "marginRight") + s.width,
                y = k + w + m(this, "marginBottom") + s.height,
                z = a.extend({}, p),
                A = l(v.my, h.outerWidth(), h.outerHeight());
            b.my[0] === "right" ? z.left -= i : b.my[0] === "center" && (z.left -= i / 2), b.my[1] === "bottom" ? z.top -= k : b.my[1] === "center" && (z.top -= k / 2), z.left += A[0], z.top += A[1], a.support.offsetFractions || (z.left = e(z.left), z.top = e(z.top)), f = {
                marginLeft: t,
                marginTop: w
            }, a.each(["left", "top"], function (d, e) {
                a.ui.position[u[d]] && a.ui.position[u[d]][e](z, {
                    targetWidth: j,
                    targetHeight: n,
                    elemWidth: i,
                    elemHeight: k,
                    collisionPosition: f,
                    collisionWidth: x,
                    collisionHeight: y,
                    offset: [c[0] + A[0], c[1] + A[1]],
                    my: b.my,
                    at: b.at,
                    within: r,
                    elem: h
                })
            }), a.fn.bgiframe && h.bgiframe(), b.using && (g = function (a) {
                var c = o.left - z.left,
                    e = c + j - i,
                    f = o.top - z.top,
                    g = f + n - k,
                    l = {
                        target: {
                            element: q,
                            left: o.left,
                            top: o.top,
                            width: j,
                            height: n
                        },
                        element: {
                            element: h,
                            left: z.left,
                            top: z.top,
                            width: i,
                            height: k
                        },
                        horizontal: e < 0 ? "left" : c > 0 ? "right" : "center",
                        vertical: g < 0 ? "top" : f > 0 ? "bottom" : "middle"
                    };
                j < i && d(c + e) < j && (l.horizontal = "center"), n < k && d(f + g) < n && (l.vertical = "middle"), d(c + e) / 2 > d(f + g) / 2 ? l.important = "horizontal" : l.important = "vertical", b.using.call(this, a, l)
            }), h.offset(a.extend(z, {
                using: g
            }))
        })
    }, a.ui.position = {
        fit: {
            left: function (a, b) {
                var d = b.within,
                    e = d.isWindow ? d.scrollLeft : d.offset.left,
                    f = d.width,
                    g = a.left - b.collisionPosition.marginLeft,
                    h = e - g,
                    i = g + b.collisionWidth - f - e,
                    j;
                b.collisionWidth > f ? h > 0 && i <= 0 ? (j = a.left + h + b.collisionWidth - f - e, a.left += h - j) : i > 0 && h <= 0 ? a.left = e : h > i ? a.left = e + f - b.collisionWidth : a.left = e : h > 0 ? a.left += h : i > 0 ? a.left -= i : a.left = c(a.left - g, a.left)
            },
            top: function (a, b) {
                var d = b.within,
                    e = d.isWindow ? d.scrollTop : d.offset.top,
                    f = b.within.height,
                    g = a.top - b.collisionPosition.marginTop,
                    h = e - g,
                    i = g + b.collisionHeight - f - e,
                    j;
                b.collisionHeight > f ? h > 0 && i <= 0 ? (j = a.top + h + b.collisionHeight - f - e, a.top += h - j) : i > 0 && h <= 0 ? a.top = e : h > i ? a.top = e + f - b.collisionHeight : a.top = e : h > 0 ? a.top += h : i > 0 ? a.top -= i : a.top = c(a.top - g, a.top)
            }
        },
        flip: {
            left: function (a, b) {
                var c = b.within,
                    e = c.offset.left + c.scrollLeft,
                    f = c.width,
                    g = c.isWindow ? 0 : c.offset.left,
                    h = a.left - b.collisionPosition.marginLeft,
                    i = h - g,
                    j = h + b.collisionWidth - f - g,
                    k = b.my[0] === "left" ? -b.elemWidth : b.my[0] === "right" ? b.elemWidth : 0,
                    l = b.at[0] === "left" ? b.targetWidth : b.at[0] === "right" ? -b.targetWidth : 0,
                    m = -2 * b.offset[0],
                    n, o;
                if (i < 0) {
                    n = a.left + k + l + m + b.collisionWidth - f - e;
                    if (n < 0 || n < d(i)) a.left += k + l + m
                } else if (j > 0) {
                    o = a.left - b.collisionPosition.marginLeft + k + l + m - g;
                    if (o > 0 || d(o) < j) a.left += k + l + m
                }
            },
            top: function (a, b) {
                var c = b.within,
                    e = c.offset.top + c.scrollTop,
                    f = c.height,
                    g = c.isWindow ? 0 : c.offset.top,
                    h = a.top - b.collisionPosition.marginTop,
                    i = h - g,
                    j = h + b.collisionHeight - f - g,
                    k = b.my[1] === "top",
                    l = k ? -b.elemHeight : b.my[1] === "bottom" ? b.elemHeight : 0,
                    m = b.at[1] === "top" ? b.targetHeight : b.at[1] === "bottom" ? -b.targetHeight : 0,
                    n = -2 * b.offset[1],
                    o, p;
                i < 0 ? (p = a.top + l + m + n + b.collisionHeight - f - e, a.top + l + m + n > i && (p < 0 || p < d(i)) && (a.top += l + m + n)) : j > 0 && (o = a.top - b.collisionPosition.marginTop + l + m + n - g, a.top + l + m + n > j && (o > 0 || d(o) < j) && (a.top += l + m + n))
            }
        },
        flipfit: {
            left: function () {
                a.ui.position.flip.left.apply(this, arguments), a.ui.position.fit.left.apply(this, arguments)
            },
            top: function () {
                a.ui.position.flip.top.apply(this, arguments), a.ui.position.fit.top.apply(this, arguments)
            }
        }
    }, function () {
        var b, c, d, e, f, g = document.getElementsByTagName("body")[0],
            h = document.createElement("div");
        b = document.createElement(g ? "div" : "body"), d = {
            visibility: "hidden",
            width: 0,
            height: 0,
            border: 0,
            margin: 0,
            background: "none"
        }, g && a.extend(d, {
            position: "absolute",
            left: "-1000px",
            top: "-1000px"
        });
        for (f in d) b.style[f] = d[f];
        b.appendChild(h), c = g || document.documentElement, c.insertBefore(b, c.firstChild), h.style.cssText = "position: absolute; left: 10.7432222px;", e = a(h).offset().left, a.support.offsetFractions = e > 10 && e < 11, b.innerHTML = "", c.removeChild(b)
    }(), a.uiBackCompat !== !1 &&
    function (a) {
        var b = a.fn.position;
        a.fn.position = function (c) {
            if (!c || !c.offset) return b.call(this, c);
            var d = c.offset.split(" "),
                e = c.at.split(" ");
            return d.length === 1 && (d[1] = d[0]), /^\d/.test(d[0]) && (d[0] = "+" + d[0]), /^\d/.test(d[1]) && (d[1] = "+" + d[1]), e.length === 1 && (/left|center|right/.test(e[0]) ? e[1] = "center" : (e[1] = e[0], e[0] = "center")), b.call(this, a.extend(c, {
                at: e[0] + d[0] + " " + e[1] + d[1],
                offset: undefined
            }))
        }
    }(jQuery)
}), define("jqueryui/resizable", ["jquery", "jqueryui/core", "jqueryui/mouse", "jqueryui/widget"], function (a) {
    a.widget("ui.resizable", a.ui.mouse, {
        version: "@VERSION",
        widgetEventPrefix: "resize",
        options: {
            alsoResize: !1,
            animate: !1,
            animateDuration: "slow",
            animateEasing: "swing",
            aspectRatio: !1,
            autoHide: !1,
            containment: !1,
            ghost: !1,
            grid: !1,
            handles: "e,s,se",
            helper: !1,
            maxHeight: null,
            maxWidth: null,
            minHeight: 10,
            minWidth: 10,
            zIndex: 1e3
        },
        _create: function () {
            var b = this,
                c = this.options;
            this.element.addClass("ui-resizable"), a.extend(this, {
                _aspectRatio: !! c.aspectRatio,
                aspectRatio: c.aspectRatio,
                originalElement: this.element,
                _proportionallyResizeElements: [],
                _helper: c.helper || c.ghost || c.animate ? c.helper || "ui-resizable-helper" : null
            }), this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i) && (this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
                position: this.element.css("position"),
                width: this.element.outerWidth(),
                height: this.element.outerHeight(),
                top: this.element.css("top"),
                left: this.element.css("left")
            })), this.element = this.element.parent().data("resizable", this.element.data("resizable")), this.elementIsWrapper = !0, this.element.css({
                marginLeft: this.originalElement.css("marginLeft"),
                marginTop: this.originalElement.css("marginTop"),
                marginRight: this.originalElement.css("marginRight"),
                marginBottom: this.originalElement.css("marginBottom")
            }), this.originalElement.css({
                marginLeft: 0,
                marginTop: 0,
                marginRight: 0,
                marginBottom: 0
            }), this.originalResizeStyle = this.originalElement.css("resize"), this.originalElement.css("resize", "none"), this._proportionallyResizeElements.push(this.originalElement.css({
                position: "static",
                zoom: 1,
                display: "block"
            })), this.originalElement.css({
                margin: this.originalElement.css("margin")
            }), this._proportionallyResize()), this.handles = c.handles || (a(".ui-resizable-handle", this.element).length ? {
                n: ".ui-resizable-n",
                e: ".ui-resizable-e",
                s: ".ui-resizable-s",
                w: ".ui-resizable-w",
                se: ".ui-resizable-se",
                sw: ".ui-resizable-sw",
                ne: ".ui-resizable-ne",
                nw: ".ui-resizable-nw"
            } : "e,s,se");
            if (this.handles.constructor == String) {
                this.handles == "all" && (this.handles = "n,e,s,w,se,sw,ne,nw");
                var d = this.handles.split(",");
                this.handles = {};
                for (var e = 0; e < d.length; e++) {
                    var f = a.trim(d[e]),
                        g = "ui-resizable-" + f,
                        h = a('<div class="ui-resizable-handle ' + g + '"></div>');
                    h.css({
                        zIndex: c.zIndex
                    }), "se" == f && h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"), this.handles[f] = ".ui-resizable-" + f, this.element.append(h)
                }
            }
            this._renderAxis = function (b) {
                b = b || this.element;
                for (var c in this.handles) {
                    this.handles[c].constructor == String && (this.handles[c] = a(this.handles[c], this.element).show());
                    if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
                        var d = a(this.handles[c], this.element),
                            e = 0;
                        e = /sw|ne|nw|se|n|s/.test(c) ? d.outerHeight() : d.outerWidth();
                        var f = ["padding", /ne|nw|n/.test(c) ? "Top" : /se|sw|s/.test(c) ? "Bottom" : /^e$/.test(c) ? "Right" : "Left"].join("");
                        b.css(f, e), this._proportionallyResize()
                    }
                    if (!a(this.handles[c]).length) continue
                }
            }, this._renderAxis(this.element), this._handles = a(".ui-resizable-handle", this.element).disableSelection(), this._handles.mouseover(function () {
                if (!b.resizing) {
                    if (this.className) var a = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
                    b.axis = a && a[1] ? a[1] : "se"
                }
            }), c.autoHide && (this._handles.hide(), a(this.element).addClass("ui-resizable-autohide").mouseenter(function () {
                if (c.disabled) return;
                a(this).removeClass("ui-resizable-autohide"), b._handles.show()
            }).mouseleave(function () {
                if (c.disabled) return;
                b.resizing || (a(this).addClass("ui-resizable-autohide"), b._handles.hide())
            })), this._mouseInit()
        },
        _destroy: function () {
            this._mouseDestroy();
            var b = function (b) {
                    a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()
                };
            if (this.elementIsWrapper) {
                b(this.element);
                var c = this.element;
                c.after(this.originalElement.css({
                    position: c.css("position"),
                    width: c.outerWidth(),
                    height: c.outerHeight(),
                    top: c.css("top"),
                    left: c.css("left")
                })).remove()
            }
            return this.originalElement.css("resize", this.originalResizeStyle), b(this.originalElement), this
        },
        _mouseCapture: function (b) {
            var c = !1;
            for (var d in this.handles) a(this.handles[d])[0] == b.target && (c = !0);
            return !this.options.disabled && c
        },
        _mouseStart: function (c) {
            var d = this.options,
                e = this.element.position(),
                f = this.element;
            this.resizing = !0, this.documentScroll = {
                top: a(document).scrollTop(),
                left: a(document).scrollLeft()
            }, (f.is(".ui-draggable") || /absolute/.test(f.css("position"))) && f.css({
                position: "absolute",
                top: e.top,
                left: e.left
            }), this._renderProxy();
            var g = b(this.helper.css("left")),
                h = b(this.helper.css("top"));
            d.containment && (g += a(d.containment).scrollLeft() || 0, h += a(d.containment).scrollTop() || 0), this.offset = this.helper.offset(), this.position = {
                left: g,
                top: h
            }, this.size = this._helper ? {
                width: f.outerWidth(),
                height: f.outerHeight()
            } : {
                width: f.width(),
                height: f.height()
            }, this.originalSize = this._helper ? {
                width: f.outerWidth(),
                height: f.outerHeight()
            } : {
                width: f.width(),
                height: f.height()
            }, this.originalPosition = {
                left: g,
                top: h
            }, this.sizeDiff = {
                width: f.outerWidth() - f.width(),
                height: f.outerHeight() - f.height()
            }, this.originalMousePosition = {
                left: c.pageX,
                top: c.pageY
            }, this.aspectRatio = typeof d.aspectRatio == "number" ? d.aspectRatio : this.originalSize.width / this.originalSize.height || 1;
            var i = a(".ui-resizable-" + this.axis).css("cursor");
            return a("body").css("cursor", i == "auto" ? this.axis + "-resize" : i), f.addClass("ui-resizable-resizing"), this._propagate("start", c), !0
        },
        _mouseDrag: function (a) {
            var b = this.helper,
                c = this.options,
                d = {},
                e = this,
                f = this.originalMousePosition,
                g = this.axis,
                h = a.pageX - f.left || 0,
                i = a.pageY - f.top || 0,
                j = this._change[g];
            if (!j) return !1;
            var k = j.apply(this, [a, h, i]);
            this._updateVirtualBoundaries(a.shiftKey);
            if (this._aspectRatio || a.shiftKey) k = this._updateRatio(k, a);
            return k = this._respectSize(k, a), this._propagate("resize", a), b.css({
                top: this.position.top + "px",
                left: this.position.left + "px",
                width: this.size.width + "px",
                height: this.size.height + "px"
            }), !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize(), this._updateCache(k), this._trigger("resize", a, this.ui()), !1
        },
        _mouseStop: function (b) {
            this.resizing = !1;
            var c = this.options,
                d = this;
            if (this._helper) {
                var e = this._proportionallyResizeElements,
                    f = e.length && /textarea/i.test(e[0].nodeName),
                    g = f && a.ui.hasScroll(e[0], "left") ? 0 : d.sizeDiff.height,
                    h = f ? 0 : d.sizeDiff.width,
                    i = {
                        width: d.helper.width() - h,
                        height: d.helper.height() - g
                    },
                    j = parseInt(d.element.css("left"), 10) + (d.position.left - d.originalPosition.left) || null,
                    k = parseInt(d.element.css("top"), 10) + (d.position.top - d.originalPosition.top) || null;
                c.animate || this.element.css(a.extend(i, {
                    top: k,
                    left: j
                })), d.helper.height(d.size.height), d.helper.width(d.size.width), this._helper && !c.animate && this._proportionallyResize()
            }
            return a("body").css("cursor", "auto"), this.element.removeClass("ui-resizable-resizing"), this._propagate("stop", b), this._helper && this.helper.remove(), !1
        },
        _updateVirtualBoundaries: function (a) {
            var b = this.options,
                d, e, f, g, h;
            h = {
                minWidth: c(b.minWidth) ? b.minWidth : 0,
                maxWidth: c(b.maxWidth) ? b.maxWidth : Infinity,
                minHeight: c(b.minHeight) ? b.minHeight : 0,
                maxHeight: c(b.maxHeight) ? b.maxHeight : Infinity
            };
            if (this._aspectRatio || a) d = h.minHeight * this.aspectRatio, f = h.minWidth / this.aspectRatio, e = h.maxHeight * this.aspectRatio, g = h.maxWidth / this.aspectRatio, d > h.minWidth && (h.minWidth = d), f > h.minHeight && (h.minHeight = f), e < h.maxWidth && (h.maxWidth = e), g < h.maxHeight && (h.maxHeight = g);
            this._vBoundaries = h
        },
        _updateCache: function (a) {
            var b = this.options;
            this.offset = this.helper.offset(), c(a.left) && (this.position.left = a.left), c(a.top) && (this.position.top = a.top), c(a.height) && (this.size.height = a.height), c(a.width) && (this.size.width = a.width)
        },
        _updateRatio: function (a, b) {
            var d = this.options,
                e = this.position,
                f = this.size,
                g = this.axis;
            return c(a.height) ? a.width = a.height * this.aspectRatio : c(a.width) && (a.height = a.width / this.aspectRatio), g == "sw" && (a.left = e.left + (f.width - a.width), a.top = null), g == "nw" && (a.top = e.top + (f.height - a.height), a.left = e.left + (f.width - a.width)), a
        },
        _respectSize: function (a, b) {
            var d = this.helper,
                e = this._vBoundaries,
                f = this._aspectRatio || b.shiftKey,
                g = this.axis,
                h = c(a.width) && e.maxWidth && e.maxWidth < a.width,
                i = c(a.height) && e.maxHeight && e.maxHeight < a.height,
                j = c(a.width) && e.minWidth && e.minWidth > a.width,
                k = c(a.height) && e.minHeight && e.minHeight > a.height;
            j && (a.width = e.minWidth), k && (a.height = e.minHeight), h && (a.width = e.maxWidth), i && (a.height = e.maxHeight);
            var l = this.originalPosition.left + this.originalSize.width,
                m = this.position.top + this.size.height,
                n = /sw|nw|w/.test(g),
                o = /nw|ne|n/.test(g);
            j && n && (a.left = l - e.minWidth), h && n && (a.left = l - e.maxWidth), k && o && (a.top = m - e.minHeight), i && o && (a.top = m - e.maxHeight);
            var p = !a.width && !a.height;
            return p && !a.left && a.top ? a.top = null : p && !a.top && a.left && (a.left = null), a
        },
        _proportionallyResize: function () {
            var b = this.options;
            if (!this._proportionallyResizeElements.length) return;
            var c = this.helper || this.element;
            for (var d = 0; d < this._proportionallyResizeElements.length; d++) {
                var e = this._proportionallyResizeElements[d];
                if (!this.borderDif) {
                    var f = [e.css("borderTopWidth"), e.css("borderRightWidth"), e.css("borderBottomWidth"), e.css("borderLeftWidth")],
                        g = [e.css("paddingTop"), e.css("paddingRight"), e.css("paddingBottom"), e.css("paddingLeft")];
                    this.borderDif = a.map(f, function (a, b) {
                        var c = parseInt(a, 10) || 0,
                            d = parseInt(g[b], 10) || 0;
                        return c + d
                    })
                }
                e.css({
                    height: c.height() - this.borderDif[0] - this.borderDif[2] || 0,
                    width: c.width() - this.borderDif[1] - this.borderDif[3] || 0
                })
            }
        },
        _renderProxy: function () {
            var b = this.element,
                c = this.options;
            this.elementOffset = b.offset();
            if (this._helper) {
                this.helper = this.helper || a('<div style="overflow:hidden;"></div>');
                var d = a.browser.msie && a.browser.version < 7,
                    e = d ? 1 : 0,
                    f = d ? 2 : -1;
                this.helper.addClass(this._helper).css({
                    width: this.element.outerWidth() + f,
                    height: this.element.outerHeight() + f,
                    position: "absolute",
                    left: this.elementOffset.left - e + "px",
                    top: this.elementOffset.top - e + "px",
                    zIndex: ++c.zIndex
                }), this.helper.appendTo("body").disableSelection()
            } else this.helper = this.element
        },
        _change: {
            e: function (a, b, c) {
                return {
                    width: this.originalSize.width + b
                }
            },
            w: function (a, b, c) {
                var d = this.options,
                    e = this.originalSize,
                    f = this.originalPosition;
                return {
                    left: f.left + b,
                    width: e.width - b
                }
            },
            n: function (a, b, c) {
                var d = this.options,
                    e = this.originalSize,
                    f = this.originalPosition;
                return {
                    top: f.top + c,
                    height: e.height - c
                }
            },
            s: function (a, b, c) {
                return {
                    height: this.originalSize.height + c
                }
            },
            se: function (b, c, d) {
                return a.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [b, c, d]))
            },
            sw: function (b, c, d) {
                return a.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [b, c, d]))
            },
            ne: function (b, c, d) {
                return a.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [b, c, d]))
            },
            nw: function (b, c, d) {
                return a.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [b, c, d]))
            }
        },
        _propagate: function (b, c) {
            a.ui.plugin.call(this, b, [c, this.ui()]), b != "resize" && this._trigger(b, c, this.ui())
        },
        plugins: {},
        ui: function () {
            return {
                originalElement: this.originalElement,
                element: this.element,
                helper: this.helper,
                position: this.position,
                size: this.size,
                originalSize: this.originalSize,
                originalPosition: this.originalPosition
            }
        }
    }), a.ui.plugin.add("resizable", "alsoResize", {
        start: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options,
                f = function (b) {
                    a(b).each(function () {
                        var b = a(this);
                        b.data("resizable-alsoresize", {
                            width: parseInt(b.width(), 10),
                            height: parseInt(b.height(), 10),
                            left: parseInt(b.css("left"), 10),
                            top: parseInt(b.css("top"), 10)
                        })
                    })
                };
            typeof e.alsoResize == "object" && !e.alsoResize.parentNode ? e.alsoResize.length ? (e.alsoResize = e.alsoResize[0], f(e.alsoResize)) : a.each(e.alsoResize, function (a) {
                f(a)
            }) : f(e.alsoResize)
        },
        resize: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options,
                f = d.originalSize,
                g = d.originalPosition,
                h = {
                    height: d.size.height - f.height || 0,
                    width: d.size.width - f.width || 0,
                    top: d.position.top - g.top || 0,
                    left: d.position.left - g.left || 0
                },
                i = function (b, d) {
                    a(b).each(function () {
                        var b = a(this),
                            e = a(this).data("resizable-alsoresize"),
                            f = {},
                            g = d && d.length ? d : b.parents(c.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
                        a.each(g, function (a, b) {
                            var c = (e[b] || 0) + (h[b] || 0);
                            c && c >= 0 && (f[b] = c || null)
                        }), b.css(f)
                    })
                };
            typeof e.alsoResize == "object" && !e.alsoResize.nodeType ? a.each(e.alsoResize, function (a, b) {
                i(a, b)
            }) : i(e.alsoResize)
        },
        stop: function (b, c) {
            a(this).removeData("resizable-alsoresize")
        }
    }), a.ui.plugin.add("resizable", "animate", {
        stop: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options,
                f = d._proportionallyResizeElements,
                g = f.length && /textarea/i.test(f[0].nodeName),
                h = g && a.ui.hasScroll(f[0], "left") ? 0 : d.sizeDiff.height,
                i = g ? 0 : d.sizeDiff.width,
                j = {
                    width: d.size.width - i,
                    height: d.size.height - h
                },
                k = parseInt(d.element.css("left"), 10) + (d.position.left - d.originalPosition.left) || null,
                l = parseInt(d.element.css("top"), 10) + (d.position.top - d.originalPosition.top) || null;
            d.element.animate(a.extend(j, l && k ? {
                top: l,
                left: k
            } : {}), {
                duration: e.animateDuration,
                easing: e.animateEasing,
                step: function () {
                    var c = {
                        width: parseInt(d.element.css("width"), 10),
                        height: parseInt(d.element.css("height"), 10),
                        top: parseInt(d.element.css("top"), 10),
                        left: parseInt(d.element.css("left"), 10)
                    };
                    f && f.length && a(f[0]).css({
                        width: c.width,
                        height: c.height
                    }), d._updateCache(c), d._propagate("resize", b)
                }
            })
        }
    }), a.ui.plugin.add("resizable", "containment", {
        start: function (c, d) {
            var e = a(this).data("resizable"),
                f = e.options,
                g = e.element,
                h = f.containment,
                i = h instanceof a ? h.get(0) : /parent/.test(h) ? g.parent().get(0) : h;
            if (!i) return;
            e.containerElement = a(i);
            if (/document/.test(h) || h == document) e.containerOffset = {
                left: 0,
                top: 0
            }, e.containerPosition = {
                left: 0,
                top: 0
            }, e.parentData = {
                element: a(document),
                left: 0,
                top: 0,
                width: a(document).width(),
                height: a(document).height() || document.body.parentNode.scrollHeight
            };
            else {
                var j = a(i),
                    k = [];
                a(["Top", "Right", "Left", "Bottom"]).each(function (a, c) {
                    k[a] = b(j.css("padding" + c))
                }), e.containerOffset = j.offset(), e.containerPosition = j.position(), e.containerSize = {
                    height: j.innerHeight() - k[3],
                    width: j.innerWidth() - k[1]
                };
                var l = e.containerOffset,
                    m = e.containerSize.height,
                    n = e.containerSize.width,
                    o = a.ui.hasScroll(i, "left") ? i.scrollWidth : n,
                    p = a.ui.hasScroll(i) ? i.scrollHeight : m;
                e.parentData = {
                    element: i,
                    left: l.left,
                    top: l.top,
                    width: o,
                    height: p
                }
            }
        },
        resize: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options,
                f = d.containerSize,
                g = d.containerOffset,
                h = d.size,
                i = d.position,
                j = d._aspectRatio || b.shiftKey,
                k = {
                    top: 0,
                    left: 0
                },
                l = d.containerElement;
            l[0] != document && /static/.test(l.css("position")) && (k = g), i.left < (d._helper ? g.left : 0) && (d.size.width = d.size.width + (d._helper ? d.position.left - g.left : d.position.left - k.left), j && (d.size.height = d.size.width / d.aspectRatio), d.position.left = e.helper ? g.left : 0), i.top < (d._helper ? g.top : 0) && (d.size.height = d.size.height + (d._helper ? d.position.top - g.top : d.position.top), j && (d.size.width = d.size.height * d.aspectRatio), d.position.top = d._helper ? g.top : 0), d.offset.left = d.parentData.left + d.position.left, d.offset.top = d.parentData.top + d.position.top;
            var m = Math.abs((d._helper ? d.offset.left - k.left : d.offset.left - k.left) + d.sizeDiff.width),
                n = Math.abs((d._helper ? d.offset.top - k.top : d.offset.top - g.top) + d.sizeDiff.height),
                o = d.containerElement.get(0) == d.element.parent().get(0),
                p = /relative|absolute/.test(d.containerElement.css("position"));
            o && p && (m -= d.parentData.left), m + d.size.width >= d.parentData.width && (d.size.width = d.parentData.width - m, j && (d.size.height = d.size.width / d.aspectRatio)), n + d.size.height >= d.parentData.height && (d.size.height = d.parentData.height - n, j && (d.size.width = d.size.height * d.aspectRatio))
        },
        stop: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options,
                f = d.position,
                g = d.containerOffset,
                h = d.containerPosition,
                i = d.containerElement,
                j = a(d.helper),
                k = j.offset(),
                l = j.outerWidth() - d.sizeDiff.width,
                m = j.outerHeight() - d.sizeDiff.height;
            d._helper && !e.animate && /relative/.test(i.css("position")) && a(this).css({
                left: k.left - h.left - g.left,
                width: l,
                height: m
            }), d._helper && !e.animate && /static/.test(i.css("position")) && a(this).css({
                left: k.left - h.left - g.left,
                width: l,
                height: m
            })
        }
    }), a.ui.plugin.add("resizable", "ghost", {
        start: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options,
                f = d.size;
            d.ghost = d.originalElement.clone(), d.ghost.css({
                opacity: .25,
                display: "block",
                position: "relative",
                height: f.height,
                width: f.width,
                margin: 0,
                left: 0,
                top: 0
            }).addClass("ui-resizable-ghost").addClass(typeof e.ghost == "string" ? e.ghost : ""), d.ghost.appendTo(d.helper)
        },
        resize: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options;
            d.ghost && d.ghost.css({
                position: "relative",
                height: d.size.height,
                width: d.size.width
            })
        },
        stop: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options;
            d.ghost && d.helper && d.helper.get(0).removeChild(d.ghost.get(0))
        }
    }), a.ui.plugin.add("resizable", "grid", {
        resize: function (b, c) {
            var d = a(this).data("resizable"),
                e = d.options,
                f = d.size,
                g = d.originalSize,
                h = d.originalPosition,
                i = d.axis,
                j = e._aspectRatio || b.shiftKey;
            e.grid = typeof e.grid == "number" ? [e.grid, e.grid] : e.grid;
            var k = Math.round((f.width - g.width) / (e.grid[0] || 1)) * (e.grid[0] || 1),
                l = Math.round((f.height - g.height) / (e.grid[1] || 1)) * (e.grid[1] || 1);
            /^(se|s|e)$/.test(i) ? (d.size.width = g.width + k, d.size.height = g.height + l) : /^(ne)$/.test(i) ? (d.size.width = g.width + k, d.size.height = g.height + l, d.position.top = h.top - l) : /^(sw)$/.test(i) ? (d.size.width = g.width + k, d.size.height = g.height + l, d.position.left = h.left - k) : (d.size.width = g.width + k, d.size.height = g.height + l, d.position.top = h.top - l, d.position.left = h.left - k)
        }
    });
    var b = function (a) {
            return parseInt(a, 10) || 0
        },
        c = function (a) {
            return !isNaN(parseInt(a, 10))
        }
}), define("jqueryui/dialog-unpatched", ["jquery", "jqueryui/core", "jqueryui/widget", "jqueryui/button", "jqueryui/draggable", "jqueryui/mouse", "jqueryui/position", "jqueryui/resizable"], function (a) {
    var b = "ui-dialog ui-widget ui-widget-content ui-corner-all ",
        c = {
            buttons: !0,
            height: !0,
            maxHeight: !0,
            maxWidth: !0,
            minHeight: !0,
            minWidth: !0,
            width: !0
        },
        d = {
            maxHeight: !0,
            maxWidth: !0,
            minHeight: !0,
            minWidth: !0
        };
    a.widget("ui.dialog", {
        version: "@VERSION",
        options: {
            autoOpen: !0,
            buttons: {},
            closeOnEscape: !0,
            closeText: "close",
            dialogClass: "",
            draggable: !0,
            hide: null,
            height: "auto",
            maxHeight: !1,
            maxWidth: !1,
            minHeight: 150,
            minWidth: 150,
            modal: !1,
            position: {
                my: "center",
                at: "center",
                of: window,
                collision: "fit",
                using: function (b) {
                    var c = a(this).css(b).offset().top;
                    c < 0 && a(this).css("top", b.top - c)
                }
            },
            resizable: !0,
            show: null,
            stack: !0,
            title: "",
            width: 300,
            zIndex: 1e3
        },
        _create: function () {
            this.originalTitle = this.element.attr("title"), typeof this.originalTitle != "string" && (this.originalTitle = ""), this.oldPosition = {
                parent: this.element.parent(),
                index: this.element.parent().children().index(this.element)
            }, this.options.title = this.options.title || this.originalTitle;
            var c = this,
                d = this.options,
                e = d.title || "&#160;",
                f = (this.uiDialog = a("<div>")).addClass(b + d.dialogClass).attr({
                    role: "dialog",
                    "aria-hidden": !0
                }).css({
                    display: "none",
                    outline: 0,
                    zIndex: d.zIndex
                }).attr("tabIndex", -1).keydown(function (b) {
                    d.closeOnEscape && !b.isDefaultPrevented() && b.keyCode && b.keyCode === a.ui.keyCode.ESCAPE && (c.close(b), b.preventDefault())
                }).mousedown(function (a) {
                    c.moveToTop(!1, a)
                }).appendTo("body"),
                g = this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(f),
                h = (this.uiDialogTitlebar = a("<div>")).addClass("ui-dialog-titlebar  ui-widget-header  ui-corner-all  ui-helper-clearfix").prependTo(f),
                i = a("<a href='#'></a>").addClass("ui-dialog-titlebar-close  ui-corner-all").attr("role", "button").attr("tabindex", 0).click(function (a) {
                    a.preventDefault(), c.close(a)
                }).appendTo(h),
                j = (this.uiDialogTitlebarCloseText = a("<span>")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(i),
                k = a("<span>").uniqueId().addClass("ui-dialog-title").html(e).attr("role", "heading").prependTo(h),
                l = (this.uiDialogButtonPane = a("<div>")).addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),
                m = (this.uiButtonSet = a("<div>")).addClass("ui-dialog-buttonset").appendTo(l);
            g.attr("id") === undefined && g.uniqueId(), h.find("*").add(h).disableSelection(), this._hoverable(i), this._focusable(i), d.draggable && a.fn.draggable && this._makeDraggable(), d.resizable && a.fn.resizable && this._makeResizable(), this._createButtons(d.buttons), this._isOpen = !1, a.fn.bgiframe && f.bgiframe()
        },
        _init: function () {
            this.options.autoOpen && this.open()
        },
        _destroy: function () {
            var a, b = this.oldPosition;
            this.overlay && this.overlay.destroy(), this.uiDialog.hide(), this.element.removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"), this.uiDialog.remove(), this.originalTitle && this.element.attr("title", this.originalTitle), a = b.parent.children().eq(b.index), a.length ? a.before(this.element) : b.parent.append(this.element)
        },
        widget: function () {
            return this.uiDialog
        },
        close: function (b) {
            var c = this,
                d, e;
            if (!this._isOpen) return;
            if (!1 === this._trigger("beforeClose", b)) return;
            return this._isOpen = !1, this.overlay && this.overlay.destroy(), this._off(this.uiDialog, "keypress"), this.options.hide ? this.uiDialog.hide(this.options.hide, function () {
                c._trigger("close", b)
            }) : (this.uiDialog.hide(), this._trigger("close", b)), this.uiDialog.attr("aria-hidden", !0), a.ui.dialog.overlay.resize(), this.options.modal && (d = 0, a(".ui-dialog").each(function () {
                this !== c.uiDialog[0] && (e = a(this).css("z-index"), isNaN(e) || (d = Math.max(d, e)))
            }), a.ui.dialog.maxZ = d, this.oldFocus && a(this.oldFocus).is(":visible") && this.oldFocus.focus()), this
        },
        isOpen: function () {
            return this._isOpen
        },
        moveToTop: function (b, c) {
            var d = this.options,
                e;
            return d.modal && !b || !d.stack && !d.modal ? this._trigger("focus", c) : (d.zIndex > a.ui.dialog.maxZ && (a.ui.dialog.maxZ = d.zIndex), this.overlay && (a.ui.dialog.maxZ += 1, a.ui.dialog.overlay.maxZ = a.ui.dialog.maxZ, this.overlay.$el.css("z-index", a.ui.dialog.overlay.maxZ)), e = {
                scrollTop: this.element.scrollTop(),
                scrollLeft: this.element.scrollLeft()
            }, a.ui.dialog.maxZ += 1, this.uiDialog.css("z-index", a.ui.dialog.maxZ), this.element.attr(e), this._trigger("focus", c), this)
        },
        open: function () {
            if (this._isOpen) return;
            var b, c = this.options,
                d = this.uiDialog;
            return this._size(), this._position(c.position), d.show(c.show), this.overlay = c.modal ? new a.ui.dialog.overlay(this) : null, this.moveToTop(!0), c.modal && (this.oldFocus = document.activeElement, a(":tabbable:first", this.uiDialog).focus(), this._on(d, {
                keydown: function (b) {
                    if (b.keyCode !== a.ui.keyCode.TAB) return;
                    var c = a(":tabbable", this.uiDialog),
                        d = a.inArray(b.target, c);
                    if (d == -1) return;
                    var e = d + (b.shiftKey ? -1 : 1);
                    return e = (e + c.length) % c.length, c.eq(e).focus(), !1
                }
            })), b = this.element.find(":tabbable"), b.length || (b = this.uiDialogButtonPane.find(":tabbable"), b.length || (b = d)), this.uiDialog.attr("aria-hidden", !1), a.browser && a.browser.safari && b.eq(0).focus(), this._isOpen = !0, this._trigger("open"), this
        },
        _createButtons: function (b) {
            var c, d, e = this,
                f = !1;
            this.uiDialogButtonPane.remove(), this.uiButtonSet.empty(), typeof b == "object" && b !== null && a.each(b, function () {
                return !(f = !0)
            }), f ? (a.each(b, function (b, c) {
                c = a.isFunction(c) ? {
                    click: c,
                    text: b
                } : c;
                var d = a("<button type='button'>").attr(c, !0).unbind("click").click(function () {
                    c.click.apply(e.element[0], arguments)
                }).appendTo(e.uiButtonSet);
                a.fn.button && d.button()
            }), this.uiDialog.addClass("ui-dialog-buttons"), this.uiDialogButtonPane.appendTo(this.uiDialog)) : this.uiDialog.removeClass("ui-dialog-buttons")
        },
        _makeDraggable: function () {
            function d(a) {
                return {
                    position: a.position,
                    offset: a.offset
                }
            }
            var b = this,
                c = this.options;
            this.uiDialog.draggable({
                cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
                handle: ".ui-dialog-titlebar",
                containment: "document",
                start: function (c, e) {
                    a(this).addClass("ui-dialog-dragging"), b._trigger("dragStart", c, d(e))
                },
                drag: function (a, c) {
                    b._trigger("drag", a, d(c))
                },
                stop: function (e, f) {
                    c.position = [f.position.left - b.document.scrollLeft(), f.position.top - b.document.scrollTop()], a(this).removeClass("ui-dialog-dragging"), b._trigger("dragStop", e, d(f)), a.ui.dialog.overlay.resize()
                }
            })
        },
        _makeResizable: function (b) {
            function g(a) {
                return {
                    originalPosition: a.originalPosition,
                    originalSize: a.originalSize,
                    position: a.position,
                    size: a.size
                }
            }
            b = b === undefined ? this.options.resizable : b;
            var c = this,
                d = this.options,
                e = this.uiDialog.css("position"),
                f = typeof b == "string" ? b : "n,e,s,w,se,sw,ne,nw";
            this.uiDialog.resizable({
                cancel: ".ui-dialog-content",
                containment: "document",
                alsoResize: this.element,
                maxWidth: d.maxWidth,
                maxHeight: d.maxHeight,
                minWidth: d.minWidth,
                minHeight: this._minHeight(),
                handles: f,
                start: function (b, d) {
                    a(this).addClass("ui-dialog-resizing"), c._trigger("resizeStart", b, g(d))
                },
                resize: function (a, b) {
                    c._trigger("resize", a, g(b))
                },
                stop: function (b, e) {
                    a(this).removeClass("ui-dialog-resizing"), d.height = a(this).height(), d.width = a(this).width(), c._trigger("resizeStop", b, g(e)), a.ui.dialog.overlay.resize()
                }
            }).css("position", e).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")
        },
        _minHeight: function () {
            var a = this.options;
            return a.height === "auto" ? a.minHeight : Math.min(a.minHeight, a.height)
        },
        _position: function (b) {
            var c = [],
                d = [0, 0],
                e;
            if (b) {
                if (typeof b == "string" || typeof b == "object" && "0" in b) c = b.split ? b.split(" ") : [b[0], b[1]], c.length === 1 && (c[1] = c[0]), a.each(["left", "top"], function (a, b) {
                    +c[a] === c[a] && (d[a] = c[a], c[a] = b)
                }), b = {
                    my: c.join(" "),
                    at: c.join(" "),
                    offset: d.join(" ")
                };
                b = a.extend({}, a.ui.dialog.prototype.options.position, b)
            } else b = a.ui.dialog.prototype.options.position;
            e = this.uiDialog.is(":visible"), e || this.uiDialog.show(), this.uiDialog.position(b), e || this.uiDialog.hide()
        },
        _setOptions: function (b) {
            var e = this,
                f = {},
                g = !1;
            a.each(b, function (a, b) {
                e._setOption(a, b), a in c && (g = !0), a in d && (f[a] = b)
            }), g && this._size(), this.uiDialog.is(":data(resizable)") && this.uiDialog.resizable("option", f)
        },
        _setOption: function (c, d) {
            var e, f, g = this.uiDialog;
            switch (c) {
            case "buttons":
                this._createButtons(d);
                break;
            case "closeText":
                this.uiDialogTitlebarCloseText.text("" + d);
                break;
            case "dialogClass":
                g.removeClass(this.options.dialogClass).addClass(b + d);
                break;
            case "disabled":
                d ? g.addClass("ui-dialog-disabled") : g.removeClass("ui-dialog-disabled");
                break;
            case "draggable":
                e = g.is(":data(draggable)"), e && !d && g.draggable("destroy"), !e && d && this._makeDraggable();
                break;
            case "position":
                this._position(d);
                break;
            case "resizable":
                f = g.is(":data(resizable)"), f && !d && g.resizable("destroy"), f && typeof d == "string" && g.resizable("option", "handles", d), !f && d !== !1 && this._makeResizable(d);
                break;
            case "title":
                a(".ui-dialog-title", this.uiDialogTitlebar).html("" + (d || "&#160;"))
            }
            this._super(c, d)
        },
        _size: function () {
            var b, c, d, e = this.options,
                f = this.uiDialog.is(":visible");
            this.element.show().css({
                width: "auto",
                minHeight: 0,
                height: 0
            }), e.minWidth > e.width && (e.width = e.minWidth), b = this.uiDialog.css({
                height: "auto",
                width: e.width
            }).outerHeight(), c = Math.max(0, e.minHeight - b), e.height === "auto" ? a.support.minHeight ? this.element.css({
                minHeight: c,
                height: "auto"
            }) : (this.uiDialog.show(), d = this.element.css("height", "auto").height(), f || this.uiDialog.hide(), this.element.height(Math.max(d, c))) : this.element.height(Math.max(e.height - b, 0)), this.uiDialog.is(":data(resizable)") && this.uiDialog.resizable("option", "minHeight", this._minHeight())
        }
    }), a.extend(a.ui.dialog, {
        uuid: 0,
        maxZ: 0,
        getTitleId: function (a) {
            var b = a.attr("id");
            return b || (this.uuid += 1, b = this.uuid), "ui-dialog-title-" + b
        },
        overlay: function (b) {
            this.$el = a.ui.dialog.overlay.create(b)
        }
    }), a.extend(a.ui.dialog.overlay, {
        instances: [],
        oldInstances: [],
        maxZ: 0,
        events: a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","), function (a) {
            return a + ".dialog-overlay"
        }).join(" "),
        create: function (b) {
            this.instances.length === 0 && (setTimeout(function () {
                a.ui.dialog.overlay.instances.length && a(document).bind(a.ui.dialog.overlay.events, function (c) {
                    if (a(c.target).zIndex() < a.ui.dialog.overlay.maxZ && !b.element.has(c.target).length) return !1
                })
            }, 1), a(window).bind("resize.dialog-overlay", a.ui.dialog.overlay.resize));
            var c = this.oldInstances.pop() || a("<div>").addClass("ui-widget-overlay");
            return a(document).bind("keydown.dialog-overlay", function (d) {
                var e = a.ui.dialog.overlay.instances;
                e.length !== 0 && e[e.length - 1] === c && b.options.closeOnEscape && !d.isDefaultPrevented() && d.keyCode && d.keyCode === a.ui.keyCode.ESCAPE && (b.close(d), d.preventDefault())
            }), c.appendTo(document.body).css({
                width: this.width(),
                height: this.height()
            }), a.fn.bgiframe && c.bgiframe(), this.instances.push(c), c
        },
        destroy: function (b) {
            var c = a.inArray(b, this.instances),
                d = 0;
            c !== -1 && this.oldInstances.push(this.instances.splice(c, 1)[0]), this.instances.length === 0 && a([document, window]).unbind(".dialog-overlay"), b.height(0).width(0).remove(), a.each(this.instances, function () {
                d = Math.max(d, this.css("z-index"))
            }), this.maxZ = d
        },
        height: function () {
            var b, c;
            return a.browser.msie ? (b = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight), c = Math.max(document.documentElement.offsetHeight, document.body.offsetHeight), b < c ? a(window).height() + "px" : b + "px") : a(document).height() + "px"
        },
        width: function () {
            var b, c;
            return a.browser.msie ? (b = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth), c = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth), b < c ? a(window).width() + "px" : b + "px") : a(document).width() + "px"
        },
        resize: function () {
            var b = a([]);
            a.each(a.ui.dialog.overlay.instances, function () {
                b = b.add(this)
            }), b.css({
                width: 0,
                height: 0
            }).css({
                width: a.ui.dialog.overlay.width(),
                height: a.ui.dialog.overlay.height()
            })
        }
    }), a.extend(a.ui.dialog.overlay.prototype, {
        destroy: function () {
            a.ui.dialog.overlay.destroy(this.$el)
        }
    })
}), define("jqueryui/dialog", ["jquery", "str/htmlEscape", "jqueryui/dialog-unpatched"], function (a, b, c) {
    function d(c) {
        return c ? c.jquery ? a("<div />").append(c.eq(0).clone()).html() : b("" + c) : c
    }
    a.ui.dialog.prototype.options.modal = !0;
    var e = a.ui.dialog.prototype._create,
        f = a.ui.dialog.prototype._setOption;
    return a.extend(a.ui.dialog.prototype, {
        _create: function () {
            return this.options.title || (this.options.title = this.element.attr("title"), typeof this.options.title != "string" && (this.options.title = "")), this.options.title = d(this.options.title), e.apply(this, arguments)
        },
        _setOption: function (a, b) {
            return a == "title" && (b = d(b)), f.call(this, a, b)
        }
    }), c
}), define("vendor/jquery.ba-hashchange", ["jquery"], function (a) {
    function h(a) {
        return a = a || location.href, "#" + a.replace(/^[^#]*#?(.*)$/, "$1")
    }
    "$:nomunge";
    var b = "hashchange",
        c = document,
        d, e = a.event.special,
        f = c.documentMode,
        g = "on" + b in window && (f === undefined || f > 7);
    a.fn[b] = function (a) {
        return a ? this.bind(b, a) : this.trigger(b)
    }, a.fn[b].delay = 50, e[b] = a.extend(e[b], {
        setup: function () {
            if (g) return !1;
            a(d.start)
        },
        teardown: function () {
            if (g) return !1;
            a(d.stop)
        }
    }), d = function () {
        function l() {
            var c = h(),
                d = k(f);
            c !== f ? (j(f = c, d), a(window).trigger(b)) : d !== f && (location.href = location.href.replace(/#.*/, "") + d), e = setTimeout(l, a.fn[b].delay)
        }
        var d = {},
            e, f = h(),
            i = function (a) {
                return a
            },
            j = i,
            k = i;
        return d.start = function () {
            e || l()
        }, d.stop = function () {
            e && clearTimeout(e), e = undefined
        }, a.browser.msie && !g &&
        function () {
            var e, f;
            d.start = function () {
                e || (f = a.fn[b].src, f = f && f + h(), e = a('<iframe tabindex="-1" title="empty"/>').hide().one("load", function () {
                    f || j(h()), l()
                }).attr("src", f || "javascript:0").insertAfter("body")[0].contentWindow, c.onpropertychange = function () {
                    try {
                        event.propertyName === "title" && (e.document.title = c.title)
                    } catch (a) {}
                })
            }, d.stop = i, k = function () {
                return h(e.location.href)
            }, j = function (d, f) {
                var g = e.document,
                    h = a.fn[b].domain;
                d !== f && (g.title = c.title, g.open(), h && g.write('<script>document.domain="' + h + '"</script>'), g.close(), e.location.hash = d)
            }
        }(), d
    }()
}), define("i18n", {
    load: function (a, b, c, d) {
        if (!d.translate) {
            b(["i18nObj"], function (b) {
                c(b.scoped(a))
            });
            return
        }
        b(["i18nObj", "translations/" + a], function (b, e) {
            c(d.isBuild ? null : b.scoped(a))
        })
    }
}), define("translations/course_list.wrapper", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "إغلاق",
                        reset_course_menu: "إعادة تعيين"
                    }
                }
            },
            de: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "schließen",
                        reset_course_menu: "Zurücksetzen"
                    }
                }
            },
            "el-gr": {},
            "en-AU": {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "close",
                        reset_course_menu: "Reset"
                    }
                }
            },
            "en-GB": {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "close",
                        reset_course_menu: "Reset"
                    }
                }
            },
            es: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "cerrar",
                        reset_course_menu: "Restablecer"
                    }
                }
            },
            fr: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "fermer",
                        reset_course_menu: "Réinitialiser"
                    }
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "閉じる",
                        reset_course_menu: "リセット"
                    }
                }
            },
            ko: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "닫기",
                        reset_course_menu: "원래대로"
                    }
                }
            },
            "ko-kr": {},
            nl: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "sluiten",
                        reset_course_menu: "Resetten"
                    }
                }
            },
            pl: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "zamknij",
                        reset_course_menu: "Resetuj"
                    }
                }
            },
            pt: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "fechar",
                        reset_course_menu: "Redefinir"
                    }
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "закрыть",
                        reset_course_menu: "Сброс"
                    }
                }
            },
            "tr-tr": {},
            zh: {
                course_list: {
                    wrapper: {
                        close_course_menu_title: "关闭",
                        reset_course_menu: "重置"
                    }
                }
            },
            "zh-hans": {}
        }
    })
}), define("translations/enrollmentNames", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                enrollmentNames: {
                    course_designer: "مصمم المساق",
                    observer: "المراقب",
                    student: "الطالب",
                    teacher: "المعلم",
                    teacher_assistant: "مساعد المعلم"
                }
            },
            de: {
                enrollmentNames: {
                    course_designer: "Kursdesigner",
                    observer: "Beobachter",
                    student: "Student",
                    teacher: "Dozent",
                    teacher_assistant: "Lehrassistent"
                }
            },
            "el-gr": {},
            "en-AU": {
                enrollmentNames: {
                    course_designer: "Course Designer",
                    observer: "Observer",
                    student: "Student",
                    teacher: "Teacher",
                    teacher_assistant: "TA"
                }
            },
            "en-GB": {
                enrollmentNames: {
                    course_designer: "Course designer",
                    observer: "Observer",
                    student: "Student",
                    teacher: "Teacher",
                    teacher_assistant: "TA"
                }
            },
            es: {
                enrollmentNames: {
                    course_designer: "Diseñador del curso",
                    observer: "Observador",
                    student: "Alumno",
                    teacher: "Profesor",
                    teacher_assistant: "AP"
                }
            },
            fr: {
                enrollmentNames: {
                    course_designer: "Concepteur de cours",
                    observer: "Observateur",
                    student: "Étudiant",
                    teacher: "Enseignant",
                    teacher_assistant: "AE"
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                enrollmentNames: {
                    course_designer: "コース設計者",
                    observer: "オブザーバ",
                    student: "受講生",
                    teacher: "講師",
                    teacher_assistant: "TA"
                }
            },
            ko: {
                enrollmentNames: {
                    course_designer: "과목 디자이너",
                    observer: "감독자",
                    student: "학생",
                    teacher: "교사",
                    teacher_assistant: "조교"
                }
            },
            "ko-kr": {},
            nl: {
                enrollmentNames: {
                    course_designer: "Cursusontwerper",
                    observer: "Observator",
                    student: "Leerling",
                    teacher: "Docent",
                    teacher_assistant: "Onderwijsassistent"
                }
            },
            pl: {
                enrollmentNames: {
                    course_designer: "Autor kursu",
                    observer: "Obserwator",
                    student: "Uczestnik",
                    teacher: "Instruktor",
                    teacher_assistant: "Asystent/-ka instruktora"
                }
            },
            pt: {
                enrollmentNames: {
                    course_designer: "Designer da disciplina",
                    observer: "Observador",
                    student: "Aluno",
                    teacher: "Professor",
                    teacher_assistant: "Assistente"
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                enrollmentNames: {
                    course_designer: "Дизайнер курса",
                    observer: "Наблюдатель",
                    student: "Студент",
                    teacher: "Учитель",
                    teacher_assistant: "Ассистент"
                }
            },
            "tr-tr": {},
            zh: {
                enrollmentNames: {
                    course_designer: "课程设计者",
                    observer: "观察员",
                    student: "学生",
                    teacher: "教师",
                    teacher_assistant: "助教"
                }
            },
            "zh-hans": {}
        }
    })
}), function () {
    define("compiled/util/enrollmentName", ["i18n!enrollmentNames"], function (a) {
        var b, c;
        return c = {
            StudentEnrollment: a.t("student", "Student"),
            TeacherEnrollment: a.t("teacher", "Teacher"),
            TaEnrollment: a.t("teacher_assistant", "TA"),
            ObserverEnrollment: a.t("observer", "Observer"),
            DesignerEnrollment: a.t("course_designer", "Course Designer")
        }, b = function (a) {
            return c[a] || a
        }
    })
}.call(this), define("translations/dates", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                dates: {
                    no_date: "بلا تاريخ"
                }
            },
            de: {
                dates: {
                    no_date: "Kein Datum"
                }
            },
            "el-gr": {},
            "en-AU": {
                dates: {
                    no_date: "No Date"
                }
            },
            "en-GB": {
                dates: {
                    no_date: "No date"
                }
            },
            es: {
                dates: {
                    no_date: "Sin Fecha"
                }
            },
            fr: {
                dates: {
                    no_date: "Aucune date"
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                dates: {
                    no_date: "日付なし"
                }
            },
            ko: {
                dates: {
                    no_date: "날짜 없음"
                }
            },
            "ko-kr": {},
            nl: {
                dates: {
                    no_date: "Geen datum"
                }
            },
            pl: {
                dates: {
                    no_date: "Brak daty"
                }
            },
            pt: {
                dates: {
                    no_date: "Sem data"
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                dates: {
                    no_date: "Отсутствует дата"
                }
            },
            "tr-tr": {},
            zh: {
                dates: {
                    no_date: "无日期"
                }
            },
            "zh-hans": {}
        }
    })
}), function () {
    define("compiled/util/semanticDateRange", ["i18n!dates"], function (a) {
        var b;
        return b = function (b, c) {
            var d, e, f, g;
            return b ? (f = $.parseFromISO(b), d = $.parseFromISO(c), g = f.date_formatted, f.timestamp !== d.timestamp ? (e = d.date_formatted, g !== e ? '<span class="date-range">\n  <time datetime=\'' + f.time.toISOString() + "'>\n    " + g + " at " + f.time_formatted + "\n  </time> -\n  <time datetime='" + d.time.toISOString() + "'>\n    " + e + " at " + d.time_formatted + "\n  </time>\n</span>" : '<span class="date-range">\n  <time datetime=\'' + f.time.toISOString() + "'>\n    " + g + ", " + f.time_formatted + "\n  </time> -\n  <time datetime='" + d.time.toISOString() + "'>\n    " + d.time_formatted + "\n  </time>\n</span>") : '<span class="date-range">\n  <time datetime=\'' + f.time.toISOString() + "'>\n    " + g + " at " + f.time_formatted + "\n  </time>\n</span>") : '<span class="date-range date-range-no-date">\n  ' + a.t("no_date", "No Date") + "\n</span>"
        }
    })
}.call(this), define("translations/instructure", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                buttons: {
                    cancel: "إلغاء",
                    "delete": "حذف",
                    done: "انتهاء"
                },
                date: {
                    days: {
                        today: "اليوم",
                        tomorrow: "غدًا",
                        yesterday: "أمس"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "تم تعطيل معايانات الملف لموقع Canvas هذا"
                    },
                    browsers: {
                        unrecognized: "مستعرض غير معروف"
                    },
                    buttons: {
                        next_module: "الوحدة التالية",
                        previous_module: "الوحدة السابقة",
                        search: "بحث",
                        search_by_tag: "بحث حسب العلامة"
                    },
                    confirms: {
                        default_delete_thing: "هل ترغب بالتأكيد في حذف هذا؟"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "صباحًا/مساءً"
                        }
                    },
                    draft: "مسودة",
                    errors: {
                        cannot_view_document_inline: "لا يمكن عرض هذا المستند بشكل فردي، ربما لا يكون لديك إذن لعرضه أو ربما تم حذفه.",
                        document_preview_processing: "تجري معالجة معاينة المستند حاليًا. الرجاء إعادة المحاولة لاحقًا.",
                        field_is_required: "هذا الحقل مطلوب",
                        invalid_datetime: "تاريخ/قيمة زمنية غير صالحة",
                        invalid_entry_for_field: "إدخال غير صالح: %{field}",
                        invalid_number: "يجب أن يكون هذا رقمًا.",
                        not_a_date: "هذا ليس تاريخًا!",
                        posting_message_failed: "فشل النشر، حاول مرة أخرى",
                        required: "حقل مطلوب",
                        search_failed: "فشل البحث، الرجاء المحاولة مرة أخرى."
                    },
                    ignore_forever: "تجاهل للأبد",
                    ignore_until_new_submission: "تجاهل حتى إرسال جديد",
                    labels: {
                        datepicker: {
                            time: "الاتصال"
                        }
                    },
                    links: {
                        minimize_file_preview: "تصغير معاينة الملف",
                        minimize_youtube_video: "تصغير الفيديو",
                        view_equella_content_in_new_window: "عرض المحتوى في نافذة جديدة"
                    },
                    loading: "جارٍ التحميل...",
                    no_description: "بلا وصف",
                    no_results_found: "لم يتم العثور على نتائج",
                    status: {
                        diigo_search_throttling: "يقوم Diigo بتقييد المستخدمين إلى بحث واحد كل عشر ثوان.  يرجى الانتظار...",
                        posting_message: "جارٍ نشر الرسالة...",
                        searching: "جارٍ البحث..."
                    },
                    switched_roles_message: {
                        designer: "لقد قمت بتبديل الأدوار مؤقتًا لهذا المساق، كما أنك الآن تعرض المساق باعتبارك مصممًا.  ويمكنك استعادة دورك وأذوناتك من الصفحة الرئيسية للمساق.",
                        observer: "لقد قمت بتبديل الأدوار مؤقتًا لهذا المساق، كما أنك الآن تعرض المساق باعتبارك واحدًا من الملاحظين.  ويمكنك استعادة دورك وأذوناتك من الصفحة الرئيسية للمساق.",
                        student: "لقد قمت بتبديل الأدوار مؤقتًا لهذا المساق، كما أنك الآن تعرض المساق باعتبارك طالبًا.  ويمكنك استعادة دورك وأذوناتك من الصفحة الرئيسية للمساق.",
                        ta: "لقد قمت بتبديل الأدوار مؤقتًا لهذا المساق، كما أنك الآن تعرض المساق باعتبارك مساعد معلم.  ويمكنك استعادة دورك وأذوناتك من الصفحة الرئيسية للمساق.",
                        teacher: "لقد قمت بتبديل الأدوار مؤقتًا لهذا المساق، كما أنك الآن تعرض المساق باعتبارك معلمًا.  ويمكنك استعادة دورك وأذوناتك من الصفحة الرئيسية للمساق."
                    },
                    titles: {
                        bookmark_search: "بحث في الإشارة المرجعية: %{service_name}",
                        cant_create_recordings: "هل لا يمكن إنشاء تسجيلات؟",
                        equella_content_preview: "معاينة محتوى Equella",
                        external_link: "ارتباطات إلى موقع خارجي.",
                        image_search: "بحث في الصورة: %{service_name}",
                        keyboard_shortcuts: "اختصارات لوحة المفاتيح",
                        preview_document: "معاينة المستند",
                        search_for_open_resources: "بحث عن الموارد المفتوحة",
                        view_in_new_window: "عرض في نافذة جديدة"
                    },
                    tooltips: {
                        enter_search_terms: "إدخال كلمات البحث"
                    }
                },
                time: {
                    am: "صباحًا",
                    count_hours_ago: {
                        one: "منذ ساعة مضت",
                        other: "منذ %{count} ساعة مضت"
                    },
                    count_minutes_ago: {
                        one: "منذ دقيقة مضت",
                        other: "منذ %{count} دقيقة مضت"
                    },
                    less_than_a_minute_ago: "منذ أقل من دقيقة",
                    pm: "مساءً"
                }
            },
            de: {
                buttons: {
                    cancel: "Abbrechen",
                    "delete": "Löschen",
                    done: "Fertig"
                },
                date: {
                    days: {
                        today: "Heute",
                        tomorrow: "Morgen",
                        yesterday: "Gestern"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "Die Dateivorschaufunktion wurde für diese Canvas-seite deaktiviert"
                    },
                    browsers: {
                        unrecognized: "Unbekannter Browser"
                    },
                    buttons: {
                        next_module: "Nächstes Modul",
                        previous_module: "Vorheriges Modul",
                        search: "Suchen",
                        search_by_tag: "Suche nach Tag"
                    },
                    confirms: {
                        default_delete_thing: "Möchten Sie dieses Element wirklich löschen?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "am/pm"
                        }
                    },
                    draft: "Entwurf",
                    errors: {
                        cannot_view_document_inline: "Dieses Dokument kann nicht inline angezeigt werden. Entweder Sie sind nicht dazu berechtigt, das Dokument anzuzeigen, oder das Dokument wurde gelöscht.",
                        document_preview_processing: "Die Dokumentvorschau wird derzeit verarbeitet. Versuchen Sie es später erneut.",
                        field_is_required: "Dies ist ein Pflichtfeld",
                        invalid_datetime: "Ungültige Datums-/Uhrzeitangabe",
                        invalid_entry_for_field: "Ungültiger Eintrag: %{field}",
                        invalid_number: "Diese Eingabe muss eine Nummer sein.",
                        not_a_date: "Das ist kein gültiges Datum!",
                        posting_message_failed: "Einstellen des Beitrags fehlgeschlagen, bitte erneut versuchen",
                        required: "Pflichtfeld",
                        search_failed: "Suche fehlgeschlagen, bitte erneut versuchen."
                    },
                    ignore_forever: "Immer ignorieren",
                    ignore_until_new_submission: "Ignorieren bis zur erneuten Einsendung",
                    labels: {
                        datepicker: {
                            time: "Uhrzeit"
                        }
                    },
                    links: {
                        minimize_file_preview: "Dateivorschau minimieren",
                        minimize_youtube_video: "Video minimieren",
                        view_equella_content_in_new_window: "Inhalt in neuem Fenster anzeigen"
                    },
                    loading: "Ladevorgang läuft...",
                    no_description: "Keine Beschreibung",
                    no_results_found: "Keine Ergebnisse gefunden",
                    status: {
                        diigo_search_throttling: "Diigo begrenzt Benutzer auf einen Suchvorgang pro 10 Sekunden.  Bitte warten ...",
                        posting_message: "Nachricht wird eingestellt...",
                        searching: "Suche läuft..."
                    },
                    switched_roles_message: {
                        designer: "Sie haben die Rollen für diesen Kurs vorübergehend getauscht und sehen nun die Kursansicht als Designer.  Sie können Ihre Rolle und Berechtigungen auf der Kursstartseite wiederherstellen.",
                        observer: "Sie haben die Rollen für diesen Kurs vorübergehend getauscht und sehen nun die Kursansicht als Beobachter.  Sie können Ihre Rolle und Berechtigungen auf der Kursstartseite wiederherstellen.",
                        student: "Sie haben die Rollen für diesen Kurs vorübergehend getauscht und sehen nun die Kursansicht als Student.  Sie können Ihre Rolle und Berechtigungen auf der Kursstartseite wiederherstellen.",
                        ta: "Sie haben die Rollen für diesen Kurs vorübergehend getauscht und sehen nun die Kursansicht als Lehrassistent.  Sie können Ihre Rolle und Berechtigungen auf der Kursstartseite wiederherstellen.",
                        teacher: "Sie haben die Rollen für diesen Kurs vorübergehend getauscht und sehen nun die Kursansicht als Dozent.  Sie können Ihre Rolle und Berechtigungen auf der Kursstartseite wiederherstellen."
                    },
                    titles: {
                        bookmark_search: "Lesezeichensuche: %{service_name}",
                        cant_create_recordings: "Probleme beim Erstellen der Aufzeichnungen?",
                        equella_content_preview: "Vorschau für Equella-inhalte",
                        external_link: "Führt zu einer externen Webseite.",
                        image_search: "Bildsuche: %{service_name}",
                        keyboard_shortcuts: "Tastenkombinationen",
                        preview_document: "Dokument als Vorschau anzeigen",
                        search_for_open_resources: "Suche nach offenen Ressourcen",
                        view_in_new_window: "In einem neuen Fenster anzeigen"
                    },
                    tooltips: {
                        enter_search_terms: "Suchbegriffe eingeben"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "vor 1 Stunde",
                        other: "vor %{count} Stunden"
                    },
                    count_minutes_ago: {
                        one: "vor 1 Minute",
                        other: "vor %{count} Minuten"
                    },
                    less_than_a_minute_ago: "vor weniger als einer Minute",
                    pm: "pm"
                }
            },
            "el-gr": {},
            "en-AU": {
                buttons: {
                    cancel: "Cancel",
                    "delete": "Delete",
                    done: "Done"
                },
                date: {
                    days: {
                        today: "Today",
                        tomorrow: "Tomorrow",
                        yesterday: "Yesterday"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "File previews have been disabled for this Canvas site"
                    },
                    browsers: {
                        unrecognized: "Unrecognized Browser"
                    },
                    buttons: {
                        next_module: "Next Module",
                        previous_module: "Previous Module",
                        search: "Search",
                        search_by_tag: "Search by Tag"
                    },
                    confirms: {
                        default_delete_thing: "Are you sure you want to delete this?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "am/pm"
                        }
                    },
                    draft: "Draft",
                    errors: {
                        cannot_view_document_inline: "This document cannot be viewed inline, you might not have permission to view it or it might have been deleted.",
                        document_preview_processing: "The document preview is currently being processed. Please try again later.",
                        field_is_required: "This field is required",
                        invalid_datetime: "Invalid date/time value",
                        invalid_entry_for_field: "Invalid entry: %{field}",
                        invalid_number: "This should be a number.",
                        not_a_date: "That's not a date!",
                        posting_message_failed: "Post Failed, Try Again",
                        search_failed: "Search failed, please try again."
                    },
                    ignore_forever: "Ignore Forever",
                    ignore_until_new_submission: "Ignore Until New Submission",
                    labels: {
                        datepicker: {
                            time: "Time"
                        }
                    },
                    links: {
                        minimize_file_preview: "Minimize File Preview",
                        minimize_youtube_video: "Minimize Video",
                        view_equella_content_in_new_window: "view the content in a new window"
                    },
                    loading: "Loading...",
                    no_description: "No description",
                    no_results_found: "No Results Found",
                    status: {
                        diigo_search_throttling: "Diigo limits users to one search every ten seconds.  Please wait...",
                        posting_message: "Posting Message...",
                        searching: "Searching..."
                    },
                    switched_roles_message: {
                        designer: "You have switched roles temporarily for this course, and are now viewing the course as a designer.  You can restore your role and permissions from the course home page.",
                        observer: "You have switched roles temporarily for this course, and are now viewing the course as an observer.  You can restore your role and permissions from the course home page.",
                        student: "You have switched roles temporarily for this course, and are now viewing the course as a student.  You can restore your role and permissions from the course home page.",
                        ta: "You have switched roles temporarily for this course, and are now viewing the course as a TA.  You can restore your role and permissions from the course home page.",
                        teacher: "You have switched roles temporarily for this course, and are now viewing the course as a teacher.  You can restore your role and permissions from the course home page."
                    },
                    titles: {
                        bookmark_search: "Bookmark Search: %{service_name}",
                        cant_create_recordings: "Can't Create Recordings?",
                        equella_content_preview: "Equella Content Preview",
                        external_link: "Links to an external site.",
                        image_search: "Image Search: %{service_name}",
                        keyboard_shortcuts: "Keyboard Shortcuts",
                        preview_document: "Preview the document",
                        search_for_open_resources: "Search for Open Resources",
                        view_in_new_window: "View in a new window"
                    },
                    tooltips: {
                        enter_search_terms: "enter search terms"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 hour ago",
                        other: "%{count} hours ago"
                    },
                    count_minutes_ago: {
                        one: "1 minute ago",
                        other: "%{count} minutes ago"
                    },
                    less_than_a_minute_ago: "less than a minute ago",
                    pm: "pm"
                }
            },
            "en-GB": {
                buttons: {
                    cancel: "Cancel",
                    "delete": "Delete",
                    done: "Done"
                },
                date: {
                    days: {
                        today: "Today",
                        tomorrow: "Tomorrow",
                        yesterday: "Yesterday"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "File previews have been disabled for this Canvas site"
                    },
                    browsers: {
                        unrecognized: "Unrecognized browser"
                    },
                    buttons: {
                        next_module: "Next module",
                        previous_module: "Previous module",
                        search: "Search",
                        search_by_tag: "Search by tag"
                    },
                    confirms: {
                        default_delete_thing: "Are you sure you want to delete this?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "am/pm"
                        }
                    },
                    draft: "Draft",
                    errors: {
                        cannot_view_document_inline: "This document cannot be viewed inline.",
                        document_preview_processing: "The document preview is currently being processed. Please try again later.",
                        field_is_required: "This field is required",
                        invalid_datetime: "Invalid date/time value",
                        invalid_entry_for_field: "Invalid entry: %{field}",
                        invalid_number: "This should be a number.",
                        not_a_date: "That's not a date!",
                        posting_message_failed: "Post failed. Try again",
                        search_failed: "Search failed, please try again."
                    },
                    ignore_forever: "Ignore forever",
                    ignore_until_new_submission: "Ignore until new submission",
                    labels: {
                        datepicker: {
                            time: "Time"
                        }
                    },
                    links: {
                        minimize_file_preview: "Minimize file preview",
                        minimize_youtube_video: "Minimize video",
                        view_equella_content_in_new_window: "view the content in a new window"
                    },
                    loading: "Loading...",
                    no_description: "No description",
                    no_results_found: "No results found",
                    status: {
                        diigo_search_throttling: "Diigo limits users to one search every ten seconds.  Please wait...",
                        posting_message: "Posting message...",
                        searching: "Searching..."
                    },
                    switched_roles_message: {
                        designer: "You have switched roles temporarily for this course, and are now viewing the course as a designer.  You can restore your role and permissions from the course home page.",
                        observer: "You have switched roles temporarily for this course, and are now viewing the course as an observer.  You can restore your role and permissions from the course home page.",
                        student: "You have switched roles temporarily for this course, and are now viewing the course as a student.  You can restore your role and permissions from the course home page.",
                        ta: "You have switched roles temporarily for this course, and are now viewing the course as a TA.  You can restore your role and permissions from the course home page.",
                        teacher: "You have switched roles temporarily for this course, and are now viewing the course as a teacher.  You can restore your role and permissions from the course home page."
                    },
                    titles: {
                        bookmark_search: "Bookmark Search: %{service_name}",
                        cant_create_recordings: "Can't create recordings?",
                        equella_content_preview: "Equella content preview",
                        external_link: "Links to an external site.",
                        image_search: "Image Search: %{service_name}",
                        keyboard_shortcuts: "Keyboard shortcuts",
                        preview_document: "Preview the document",
                        search_for_open_resources: "Search for open resources",
                        view_in_new_window: "View in a new window"
                    },
                    tooltips: {
                        enter_search_terms: "enter search terms"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 hour ago",
                        other: "%{count} hours ago"
                    },
                    count_minutes_ago: {
                        one: "1 minute ago",
                        other: "%{count} minutes ago"
                    },
                    less_than_a_minute_ago: "less than a minute ago",
                    pm: "pm"
                }
            },
            es: {
                buttons: {
                    cancel: "Cancelar",
                    "delete": "Borrar",
                    done: "Completado"
                },
                date: {
                    days: {
                        today: "Hoy",
                        tomorrow: "Mañana",
                        yesterday: "Ayer"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "Vista previa de archivos ha sido desactivada para este sitio de Canvas"
                    },
                    browsers: {
                        unrecognized: "Navegador no reconocido"
                    },
                    buttons: {
                        next_module: "Siguiente Módulo",
                        previous_module: "Módulo Anterior",
                        search: "Buscar",
                        search_by_tag: "Buscar por Etiqueta"
                    },
                    confirms: {
                        default_delete_thing: "¿Seguro que quiere borrarlo?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "am/pm"
                        }
                    },
                    draft: "Borrador",
                    errors: {
                        cannot_view_document_inline: "Este documento no puede ser visto en línea, puede que no tenga permiso para verlo o puede que esté borrado.",
                        document_preview_processing: "Todavía se está procesando la vista previa del documento. Inténtelo de nuevo más tarde.",
                        field_is_required: "Este campo es requerido",
                        invalid_datetime: "Valor de fecha/tiempo inválido",
                        invalid_entry_for_field: "Entrada inválida: %{field}",
                        invalid_number: "Este debería ser un número.",
                        not_a_date: "¡Esa no es una fecha!",
                        posting_message_failed: "Contribución Falló, Intente de nuevo",
                        required: "Campo obligatorio",
                        search_failed: "Búsqueda falló, Intente de nuevo."
                    },
                    ignore_forever: "Ignorar por Siempre",
                    ignore_until_new_submission: "Ignorar Hasta un Nuevo Envío",
                    labels: {
                        datepicker: {
                            time: "Hora"
                        }
                    },
                    links: {
                        minimize_file_preview: "Minimize la Vista Previa del Archivo",
                        minimize_youtube_video: "Minimize el Video",
                        view_equella_content_in_new_window: "ver el contenido en una ventana nueva"
                    },
                    loading: "Cargando...",
                    no_description: "Sin descripción",
                    no_results_found: "No se Encontraron Resultados",
                    status: {
                        diigo_search_throttling: "Diigo limita los usuarios a una búsqueda cada diez segundos. Por favor espere...",
                        posting_message: "Publicando Mensaje...",
                        searching: "Buscando..."
                    },
                    switched_roles_message: {
                        designer: "Ha cambiado los roles temporalmente para este curso, y ahora lo está viendo como un diseñador. Puede restaurar su rol y permisos desde la página de inicio de su curso.",
                        observer: "Ha cambiado los roles temporalmente para este curso, y ahora lo está viendo como un observador.Puede restaurar su rol y permisos desde la página de inicio de su curso.",
                        student: "Ha cambiado los roles temporalmente para este curso, ahora lo está viendo como un estudiante. Puede restaurar su rol y permisos desde la página de inicio de su curso.",
                        ta: "Ha cambiado los roles temporalmente para este curso, ahora lo está viendo como un AP. Puede restaurar su rol y permisos desde la página de inicio de su curso.",
                        teacher: "Ha cambiado los roles temporalmente para este curso, ahora lo está viendo como un profesor. Puede restaurar su rol y permisos desde la página de inicio de su curso."
                    },
                    titles: {
                        bookmark_search: "Búsqueda de Favoritos: %{service_name}",
                        cant_create_recordings: "¿No puede Crear Grabaciones?",
                        equella_content_preview: "Vista Previa de Contenido de Equella",
                        external_link: "Enlaces a un sitio externo.",
                        image_search: "Búsqueda de Imagen: %{service_name}",
                        keyboard_shortcuts: "Atajos de Teclado",
                        preview_document: "Vista Previa del Documento",
                        search_for_open_resources: "Buscar Recursos Abiertos",
                        view_in_new_window: "Ver en una ventana nueva"
                    },
                    tooltips: {
                        enter_search_terms: "ingresar los términos de búsqueda"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "hace 1 hora",
                        other: "hace %{count} horas"
                    },
                    count_minutes_ago: {
                        one: "hace 1 minuto",
                        other: "hace %{count} minutos"
                    },
                    less_than_a_minute_ago: "hace menos de un minuto",
                    pm: "pm"
                }
            },
            fr: {
                buttons: {
                    cancel: "Annuler",
                    "delete": "Supprimer",
                    done: "Terminé"
                },
                date: {
                    days: {
                        today: "Aujourd’hui",
                        tomorrow: "Demain",
                        yesterday: "Hier"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "Le mode aperçu des fichiers a été désactivé sur le site Canvas."
                    },
                    browsers: {
                        unrecognized: "Navigateur non reconnu"
                    },
                    buttons: {
                        next_module: "Module suivant",
                        previous_module: "Module précédent",
                        search: "Rechercher",
                        search_by_tag: "Rechercher par étiquette"
                    },
                    confirms: {
                        default_delete_thing: "Voulez-vous vraiment supprimer cet élément ?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "matin/après-midi"
                        }
                    },
                    draft: "Brouillon",
                    errors: {
                        cannot_view_document_inline: "Ce document n’est pas consultable en ligne ; peut-être n’avez-vous pas l’autorisation de le lire ou a-t-il été supprimé.",
                        document_preview_processing: "Traitement en cours de l’aperçu du document. Veuillez réessayer ultérieurement.",
                        field_is_required: "Ce champ est obligatoire.",
                        invalid_datetime: "Date/heure non valide",
                        invalid_entry_for_field: "Entrée non valide : %{field}",
                        invalid_number: "Vous devez indiquer un nombre.",
                        not_a_date: "Vous devez indiquer une date.",
                        posting_message_failed: "Échec de la publication, veuillez réessayer",
                        required: "Champ obligatoire",
                        search_failed: "Échec de la recherche, veuillez réessayer."
                    },
                    ignore_forever: "Toujours ignorer",
                    ignore_until_new_submission: "Ignorer jusqu’au prochain envoi",
                    labels: {
                        datepicker: {
                            time: "Heure"
                        }
                    },
                    links: {
                        minimize_file_preview: "Réduire l’aperçu du fichier",
                        minimize_youtube_video: "Réduire la vidéo",
                        view_equella_content_in_new_window: "afficher le contenu dans une nouvelle fenêtre"
                    },
                    loading: "Chargement en cours...",
                    no_description: "Aucune description",
                    no_results_found: "Aucun résultat trouvé",
                    status: {
                        diigo_search_throttling: "Diigo limite les utilisateurs à une recherche toutes les dix secondes. Veuillez patienter...",
                        posting_message: "Envoi d’un message...",
                        searching: "Recherche en cours..."
                    },
                    switched_roles_message: {
                        designer: "Vous avez temporairement modifié les rôles pour ce cours et pouvez l’afficher en tant que concepteur. Vous pourrez rétablir votre rôle et vos autorisations dans la page d’accueil du cours.",
                        observer: "Vous avez temporairement modifié les rôles pour ce cours et pouvez l’afficher en tant qu’observateur. Vous pourrez rétablir votre rôle et vos autorisations dans la page d’accueil du cours.",
                        student: "Vous avez temporairement modifié les rôles pour ce cours et pouvez l’afficher en tant qu’étudiant. Vous pourrez rétablir votre rôle et vos autorisations dans la page d’accueil du cours.",
                        ta: "Vous avez temporairement modifié les rôles pour ce cours et pouvez l’afficher en tant qu’aide-enseignant. Vous pourrez rétablir votre rôle et vos autorisations dans la page d’accueil du cours.",
                        teacher: "Vous avez temporairement modifié les rôles pour ce cours et pouvez l’afficher en tant qu’enseignant. Vous pourrez rétablir votre rôle et vos autorisations dans la page d’accueil du cours."
                    },
                    titles: {
                        bookmark_search: "Recherche d’un signet : %{service_name}",
                        cant_create_recordings: "Impossible de créer des enregistrements ?",
                        equella_content_preview: "Aperçu du contenu d’Equella",
                        external_link: "Liens vers un site externe.",
                        image_search: "Recherche d’image : %{service_name}",
                        keyboard_shortcuts: "Raccourcis clavier",
                        preview_document: "Afficher un aperçu du document",
                        search_for_open_resources: "Rechercher des ressources ouvertes",
                        view_in_new_window: "Afficher dans une nouvelle fenêtre"
                    },
                    tooltips: {
                        enter_search_terms: "entrer les termes de la recherche"
                    }
                },
                time: {
                    am: "matin",
                    count_hours_ago: {
                        one: "il y a 1 heure",
                        other: "il y a %{count} heures"
                    },
                    count_minutes_ago: {
                        one: "il y a 1 minute",
                        other: "il y a %{count} minutes"
                    },
                    less_than_a_minute_ago: "il y a moins d’1 minute",
                    pm: "après-midi"
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                buttons: {
                    cancel: "キャンセル",
                    "delete": "削除",
                    done: "完了"
                },
                date: {
                    days: {
                        today: "本日",
                        tomorrow: "明日",
                        yesterday: "昨日"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "この Canvas サイトは、ファイル プレビューが無効になっています"
                    },
                    browsers: {
                        unrecognized: "認識されないブラウザ"
                    },
                    buttons: {
                        next_module: "次のモジュール",
                        previous_module: "前のモジュール",
                        search: "検索",
                        search_by_tag: "タグで検索"
                    },
                    confirms: {
                        default_delete_thing: "これを削除してもよろしいですか?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "午前/午後"
                        }
                    },
                    draft: "ドラフト",
                    errors: {
                        cannot_view_document_inline: "この文書はインライン表示できません。この文書を表示するための権限がないか、または、文書が削除された可能性があります。",
                        document_preview_processing: "文書のプレビューは現在処理中です。しばらくしてからもう一度試してください。",
                        field_is_required: "このフィールドは必須項目です",
                        invalid_datetime: "無効な日付/時刻の値です",
                        invalid_entry_for_field: "無効なエントリ: %{field}",
                        invalid_number: "数値である必要があります。",
                        not_a_date: "日付ではありません!",
                        posting_message_failed: "投稿に失敗しました。もう一度、試してください",
                        required: "必須フィールド",
                        search_failed: "検索に失敗しました。もう一度やり直してください。"
                    },
                    ignore_forever: "絶えず無視",
                    ignore_until_new_submission: "新しい提出があるまで無視",
                    labels: {
                        datepicker: {
                            time: "時刻"
                        }
                    },
                    links: {
                        minimize_file_preview: "ファイル プレビューを最小化",
                        minimize_youtube_video: "ビデオを最小化",
                        view_equella_content_in_new_window: "コンテンツを新しいウィンドウで表示"
                    },
                    loading: "読み込んでいます...",
                    no_description: "説明なし",
                    no_results_found: "一致するものが見つかりませんでした",
                    status: {
                        diigo_search_throttling: "Diigo では、検索が 10 秒に 1 回に制限されています。お待ちください...",
                        posting_message: "メッセージを投稿しています...",
                        searching: "検索しています..."
                    },
                    switched_roles_message: {
                        designer: "このコースでの役割が一時的に切り替わりました。現在、設計者としてコースを表示しています。コースのホーム ページで、役割と権限を復元することができます。",
                        observer: "このコースでの役割が一時的に切り替わりました。現在、オブザーバとしてコースを表示しています。コースのホーム ページで、役割と権限を復元することができます。",
                        student: "このコースでの役割が一時的に切り替わりました。現在、受講者としてコースを表示しています。コースのホーム ページで、役割と権限を復元することができます。",
                        ta: "このコースでの役割が一時的に切り替わりました。現在、TA としてコースを表示しています。コースのホーム ページで、役割と権限を復元することができます。",
                        teacher: "このコースでの役割が一時的に切り替わりました。現在、講師としてコースを表示しています。コースのホーム ページで、役割と権限を復元することができます。"
                    },
                    titles: {
                        bookmark_search: "ブックマーク検索: %{service_name}",
                        cant_create_recordings: "記録を作成できませんか?",
                        equella_content_preview: "Equella コンテンツ プレビュー",
                        external_link: "外部サイトにリンクしています。",
                        image_search: "画像検索: %{service_name}",
                        keyboard_shortcuts: "キーボード ショートカット",
                        preview_document: "この文書をプレビュー",
                        search_for_open_resources: "オープン リソースの検索",
                        view_in_new_window: "新しいウィンドウで表示"
                    },
                    tooltips: {
                        enter_search_terms: "検索語を入力"
                    }
                },
                time: {
                    am: "午前",
                    count_hours_ago: {
                        one: "%{count} 時間前",
                        other: "%{count} 時間前"
                    },
                    count_minutes_ago: {
                        one: "%{count} 分前",
                        other: "%{count} 分前"
                    },
                    less_than_a_minute_ago: "1 分前未満",
                    pm: "午後"
                }
            },
            ko: {
                buttons: {
                    cancel: "취소",
                    "delete": "삭제",
                    done: "마침"
                },
                date: {
                    days: {
                        today: "오늘",
                        tomorrow: "내일",
                        yesterday: "어제"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "이 Canvas 사이트에는 파일 미리 보기 사용 안 함"
                    },
                    browsers: {
                        unrecognized: "인식할 수 없는 브라우저"
                    },
                    buttons: {
                        next_module: "다음 모듈",
                        previous_module: "이전 모듈",
                        search: "검색",
                        search_by_tag: "태그로 검색"
                    },
                    confirms: {
                        default_delete_thing: "삭제하시겠습니까?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "오전/오후"
                        }
                    },
                    draft: "초안",
                    errors: {
                        cannot_view_document_inline: "이 문서를 인라인으로 볼 수 없습니다. 문서 보기 권한이 없거나 문서가 삭제되었습니다.",
                        field_is_required: "이 필드가 필요함",
                        invalid_datetime: "유효하지 않은 날짜/시간값",
                        invalid_entry_for_field: "유효하지 않은 항목: %{field}",
                        invalid_number: "숫자가 필요합니다.",
                        not_a_date: "날짜가 아닙니다!",
                        posting_message_failed: "게시 실패. 다시 시도하시기 바랍니다.",
                        search_failed: "검색에 실패했습니다. 다시 시도하시기 바랍니다."
                    },
                    ignore_forever: "계속 무시",
                    ignore_until_new_submission: "새로 제출할 때까지 무시",
                    labels: {
                        datepicker: {
                            time: "시간"
                        }
                    },
                    links: {
                        minimize_file_preview: "파일 미리 보기 최소화",
                        minimize_youtube_video: "비디오 최소화",
                        view_equella_content_in_new_window: "새 창에서 내용 보기"
                    },
                    loading: "로드하는 중...",
                    no_description: "설명 없음",
                    no_results_found: "결과를 찾을 수 없음",
                    status: {
                        diigo_search_throttling: "Diigo는 매 10초마다 한 번의 검색만 허용합니다. 기다려 주십시오...",
                        posting_message: "메시지 게시 중...",
                        searching: "검색 중..."
                    },
                    switched_roles_message: {
                        designer: "이 과목에 대해 임시로 역할을 전환하여 지금 디자이너로서 과목을 보고 있습니다. 과목 홈 페이지에서 역할과 권한을 복원할 수 있습니다.",
                        observer: "이 과목에 대해 임시로 역할을 전환하여 지금 감독자로서 과목을 보고 있습니다. 과목 홈 페이지에서 역할과 권한을 복원할 수 있습니다.",
                        student: "이 과목에 대해 임시로 역할을 전환하여 지금 학생으로서 과목을 보고 있습니다. 과목 홈 페이지에서 역할과 권한을 복원할 수 있습니다.",
                        ta: "이 과목에 대해 임시로 역할을 전환하여 지금 조교로서 과목을 보고 있습니다. 과목 홈 페이지에서 역할과 권한을 복원할 수 있습니다.",
                        teacher: "이 과목에 대해 임시로 역할을 전환하여 지금 교사로서 과목을 보고 있습니다. 과목 홈 페이지에서 역할과 권한을 복원할 수 있습니다."
                    },
                    titles: {
                        bookmark_search: "북마크 검색: %{service_name}",
                        cant_create_recordings: "녹음/녹화를 할 수 없습니까?",
                        equella_content_preview: "Equella 내용 미리 보기",
                        external_link: "외부 사이트로 연결합니다.",
                        image_search: "이미지 검색: %{service_name}",
                        keyboard_shortcuts: "키보드 단축키",
                        preview_document: "문서 미리 보기",
                        search_for_open_resources: "공개 리소스 검색",
                        view_in_new_window: "새 창에서 보기"
                    },
                    tooltips: {
                        enter_search_terms: "검색 용어 입력"
                    }
                },
                time: {
                    am: "오전",
                    count_hours_ago: {
                        one: "%{count}시간 전",
                        other: "%{count}시간 전"
                    },
                    count_minutes_ago: {
                        one: "%{count}분 전",
                        other: "%{count}분 전"
                    },
                    less_than_a_minute_ago: "1분 전 이내",
                    pm: "오후"
                }
            },
            "ko-kr": {},
            nl: {
                buttons: {
                    cancel: "Annuleren",
                    "delete": "Verwijderen",
                    done: "Gereed"
                },
                date: {
                    days: {
                        today: "Vandaag",
                        tomorrow: "Morgen",
                        yesterday: "Gisteren"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "Bestandsvoorbeelden zijn uitgeschakeld voor deze Canvas-site"
                    },
                    browsers: {
                        unrecognized: "Herken browser niet"
                    },
                    buttons: {
                        next_module: "Volgende module",
                        previous_module: "Vorige module",
                        search: "Zoek",
                        search_by_tag: "Zoek op tag"
                    },
                    confirms: {
                        default_delete_thing: "Weet u zeker dat u dit wil verwijderen?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "am/pm"
                        }
                    },
                    draft: "Concept",
                    errors: {
                        cannot_view_document_inline: "Dit document kan niet inline bekeken worden.",
                        document_preview_processing: "De voorbeeldweergave van het document wordt momenteel verwerkt. Probeer het later opnieuw.",
                        field_is_required: "Dit veld is verplicht",
                        invalid_datetime: "Ongeldige datum/tijd",
                        invalid_entry_for_field: "Ongeldige invoer: %{field}",
                        invalid_number: "Dit moet een getal zijn.",
                        not_a_date: "Dit is geen datum!",
                        posting_message_failed: "Plaatsen mislukt, probeer het opnieuw",
                        required: "Verplicht veld",
                        search_failed: "Zoeken mislukt, probeer het opnieuw."
                    },
                    ignore_forever: "Negeer altijd",
                    ignore_until_new_submission: "Negeer tot nieuwe inzending",
                    labels: {
                        datepicker: {
                            time: "Tijd"
                        }
                    },
                    links: {
                        minimize_file_preview: "Minimaliseer bestandsvoorbeeld",
                        minimize_youtube_video: "Minimaliseer video",
                        view_equella_content_in_new_window: "bekijk inhoud in een nieuw venster"
                    },
                    loading: "Laden...",
                    no_description: "Geen beschrijving",
                    no_results_found: "Geen resultaten gevonden",
                    status: {
                        diigo_search_throttling: "Gebruikers kunnen maximaal één zoekopdracht per tien seconden uitvoeren. Een ogenblik geduld...",
                        posting_message: "Bericht wordt geplaatst...",
                        searching: "Zoeken..."
                    },
                    switched_roles_message: {
                        designer: "U hebt tijdelijk van rol gewisseld in deze cursus, en ziet deze cursus nu als ontwerper. U kunt uw eigen rol en permissies terugkrijgen via de startpagina van de cursus.",
                        observer: "Je hebt tijdelijk van rol gewisseld in deze cursus, en ziet deze cursus nu als observator. Je kunt je eigen rol en permissies terugkrijgen via de startpagina van de cursus.",
                        student: "U hebt tijdelijk van rol gewisseld in deze cursus en ziet deze cursus nu als cursist. U kunt uw eigen rol en permissies terugkrijgen via de startpagina van de cursus.",
                        ta: "U hebt tijdelijk van rol gewisseld in deze cursus en ziet deze cursus nu als onderwijsassistent. U kunt uw eigen rol en permissies terugkrijgen via de startpagina van de cursus.",
                        teacher: "U hebt tijdelijk van rol gewisseld in deze cursus en ziet deze cursus nu als docent. U kunt uw eigen rol en permissies terugkrijgen via de startpagina van de cursus."
                    },
                    titles: {
                        bookmark_search: "Zoekopdracht toevoegen aan favorieten: %{service_name}",
                        cant_create_recordings: "Kunt u geen opnamen maken?",
                        equella_content_preview: "Equella-inhoudsvoorbeeld",
                        external_link: "Links naar een externe site.",
                        image_search: "Afbeelding zoeken: %{service_name}",
                        keyboard_shortcuts: "Sneltoetsen",
                        preview_document: "Voorbeeld van document weergeven",
                        search_for_open_resources: "Zoek open bronnen",
                        view_in_new_window: "Bekijk in een nieuw venster"
                    },
                    tooltips: {
                        enter_search_terms: "voer zoektermen in"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 uur geleden",
                        other: "%{count} uur geleden"
                    },
                    count_minutes_ago: {
                        one: "1 minute geleden",
                        other: "%{count} minuten geleden"
                    },
                    less_than_a_minute_ago: "minder dan een minuut geleden",
                    pm: "pm"
                }
            },
            pl: {
                buttons: {
                    cancel: "Anuluj",
                    "delete": "Usuń",
                    done: "Gotowe"
                },
                date: {
                    days: {
                        today: "Dzisiaj",
                        tomorrow: "Jutro",
                        yesterday: "Wczoraj"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "Podgląd plików jest nieaktywny dla tej witryny Canvas"
                    },
                    browsers: {
                        unrecognized: "Nierozpoznana przeglądarka"
                    },
                    buttons: {
                        next_module: "Następny moduł",
                        previous_module: "Poprzedni moduł",
                        search: "Wyszukaj",
                        search_by_tag: "Wyszukaj według etykiety"
                    },
                    confirms: {
                        default_delete_thing: "Czy na pewno chcesz usunąć ten element?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "rano/po południu"
                        }
                    },
                    draft: "Wersja robocza",
                    errors: {
                        cannot_view_document_inline: "Tego dokumentu nie można bezpośrednio wyświetlić, mógł zostać usunięty lub użytkownik może nie mieć uprawnień do jego wyświetlania.",
                        document_preview_processing: "Podgląd dokumentu jest teraz przetwarzany. Spróbuj ponownie później.",
                        field_is_required: "To pole jest wymagane",
                        invalid_datetime: "Nieprawidłowa data/godzina",
                        invalid_entry_for_field: "Nieprawidłowy wpis: %{field}",
                        invalid_number: "Powinna to być wartość liczbowa.",
                        not_a_date: "To nie jest data!",
                        posting_message_failed: "Publikacja nie powiodła się, spróbuj ponownie",
                        required: "Wymagane pole",
                        search_failed: "Wyszukiwanie nie powiodło się, ponów próbę."
                    },
                    ignore_forever: "Zawsze ignoruj",
                    ignore_until_new_submission: "Ignoruj do następnego dostarczenia zadania",
                    labels: {
                        datepicker: {
                            time: "Godzina"
                        }
                    },
                    links: {
                        minimize_file_preview: "Minimalizuj podgląd pliku",
                        minimize_youtube_video: "Minimalizuj okno wideo",
                        view_equella_content_in_new_window: "pokaż zawartość w nowym oknie"
                    },
                    loading: "Trwa ładowanie...",
                    no_description: "Brak opisu",
                    no_results_found: "Brak wyników",
                    status: {
                        diigo_search_throttling: "Witryna Diigo ogranicza użytkownikom możliwość wyszukiwania do jednej próby co dziesięć sekund.  Proszę czekać...",
                        posting_message: "Trwa wysyłanie wiadomości...",
                        searching: "Trwa wyszukiwanie..."
                    },
                    switched_roles_message: {
                        designer: "Użytkownik tymczasowo zmienił rolę w kursie i teraz widzi go z poziomu autora.  Na stronie głównej można przywrócić wcześniejszą rolę i uprawnienia.",
                        observer: "Użytkownik tymczasowo zmienił rolę w kursie i teraz widzi go z poziomu słuchacza.  Na stronie głównej można przywrócić wcześniejszą rolę i uprawnienia.",
                        student: "Użytkownik tymczasowo zmienił rolę w kursie i teraz widzi go z poziomu uczestnika.  Na stronie głównej można przywrócić wcześniejszą rolę i uprawnienia.",
                        ta: "Użytkownik tymczasowo zmienił rolę w kursie i teraz widzi go z poziomu pomocnika instruktora.  Na stronie głównej można przywrócić wcześniejszą rolę i uprawnienia.",
                        teacher: "Użytkownik tymczasowo zmienił rolę w kursie i teraz widzi go z poziomu instruktora.  Na stronie głównej można przywrócić wcześniejszą rolę i uprawnienia."
                    },
                    titles: {
                        bookmark_search: "Wyszukiwanie zakładek: %{service_name}",
                        cant_create_recordings: "Nie możesz tworzyć nagrań?",
                        equella_content_preview: "Podgląd zawartości systemu Equella",
                        external_link: "Łącza do strony zewnętrznej.",
                        image_search: "Wyszukiwanie grafiki: %{service_name}",
                        keyboard_shortcuts: "Skróty klawiaturowe",
                        preview_document: "Wyświetl podgląd dokumentu",
                        search_for_open_resources: "Wyszukaj zasoby otwarte",
                        view_in_new_window: "Pokaż w nowym oknie"
                    },
                    tooltips: {
                        enter_search_terms: "wprowadź szukane terminy"
                    }
                },
                time: {
                    am: "rano",
                    count_hours_ago: {
                        one: "1 godzina temu",
                        other: "%{count} godzin temu"
                    },
                    count_minutes_ago: {
                        one: "1 minuta temu",
                        other: "%{count} minut temu"
                    },
                    less_than_a_minute_ago: "mniej niż minutę temu",
                    pm: "po południu"
                }
            },
            pt: {
                buttons: {
                    cancel: "Cancelar",
                    "delete": "Excluir",
                    done: "Concluir"
                },
                date: {
                    days: {
                        today: "Hoje",
                        tomorrow: "Amanhã",
                        yesterday: "Ontem"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "As visualizações de arquivo foram desativadas para este site Canvas"
                    },
                    browsers: {
                        unrecognized: "Navegador não reconhecido"
                    },
                    buttons: {
                        next_module: "Próximo módulo",
                        previous_module: "Módulo anterior",
                        search: "Pesquisar",
                        search_by_tag: "Pesquisar por tag"
                    },
                    confirms: {
                        default_delete_thing: "Tem certeza de que deseja excluir isto?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "am/pm"
                        }
                    },
                    draft: "Rascunho",
                    errors: {
                        cannot_view_document_inline: "Este documento não pode ser visto em linha.",
                        document_preview_processing: "A pré-visualização do documento está a ser processada. Tente novamente mais tarde.",
                        field_is_required: "Este campo é obrigatório",
                        invalid_datetime: "Valor de data/hora inválido",
                        invalid_entry_for_field: "Entrada inválida: %{field}",
                        invalid_number: "Este valor deve ser um número.",
                        not_a_date: "Isto não é uma data!",
                        posting_message_failed: "Falha na publicação, tente novamente",
                        required: "Campo de preenchimento obrigatório",
                        search_failed: "Falha na pesquisa, tente novamente."
                    },
                    ignore_forever: "Ignorar para sempre",
                    ignore_until_new_submission: "Ignorar até novo envio",
                    labels: {
                        datepicker: {
                            time: "Hora"
                        }
                    },
                    links: {
                        minimize_file_preview: "Minimizar visualização de arquivo",
                        minimize_youtube_video: "Minimizar vídeo",
                        view_equella_content_in_new_window: "exibir o conteúdo em uma nova janela"
                    },
                    loading: "Carregando...",
                    no_description: "Sem descrição",
                    no_results_found: "Nenhum resultado encontrado",
                    status: {
                        diigo_search_throttling: "O Diigo limita os utilizadores a uma pesquisa a cada dez segundos.  Aguarde...",
                        posting_message: "Publicando mensagem...",
                        searching: "Pesquisando..."
                    },
                    switched_roles_message: {
                        designer: "Mudou de função temporariamente para esta disciplina e está a ver a disciplina como designer.  Pode restaurar a sua função e as suas permissões na página inicial da disciplina.",
                        observer: "Mudou de função temporariamente para esta disciplina e está a ver a disciplina como observador.  Pode restaurar a sua função e as suas permissões na página inicial da disciplina.",
                        student: "Mudou de função temporariamente para esta disciplina e está a ver a disciplina como aluno.  Pode restaurar a sua função e as suas permissões na página inicial da disciplina.",
                        ta: "Mudou de função temporariamente para esta disciplina e está a ver a disciplina como assistente.  Pode restaurar a sua função e as suas permissões na página inicial da disciplina.",
                        teacher: "Mudou de função temporariamente para esta disciplina e está a ver a disciplina como professor.  Pode restaurar a sua função e as suas permissões na página inicial da disciplina."
                    },
                    titles: {
                        bookmark_search: "Pesquisa de favoritos: %{service_name}",
                        cant_create_recordings: "Não consegue criar gravações?",
                        equella_content_preview: "Visualização do conteúdo do Equella",
                        external_link: "Links para um site externo",
                        image_search: "Pesquisa de imagem: %{service_name}",
                        keyboard_shortcuts: "Atalhos de teclado",
                        preview_document: "Visualizar o documento",
                        search_for_open_resources: "Procurar recursos abertos",
                        view_in_new_window: "Exibir em uma nova janela"
                    },
                    tooltips: {
                        enter_search_terms: "inserir termos de pesquisa"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 hora atrás",
                        other: "%{count} horas atrás"
                    },
                    count_minutes_ago: {
                        one: "1 minuto atrás",
                        other: "%{count} minutos atrás"
                    },
                    less_than_a_minute_ago: "há menos de um minuto",
                    pm: "pm"
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                buttons: {
                    cancel: "Отменить",
                    "delete": "Удалить",
                    done: "Готово"
                },
                date: {
                    days: {
                        today: "Сегодня",
                        tomorrow: "Завтра",
                        yesterday: "Вчера"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "Предварительный просмотр файла отключен для этого сайта Canvas"
                    },
                    browsers: {
                        unrecognized: "Нераспознанный браузер"
                    },
                    buttons: {
                        next_module: "Следующий модуль",
                        previous_module: "предыдущий модуль",
                        search: "Поиск",
                        search_by_tag: "Поиск по тегу"
                    },
                    confirms: {
                        default_delete_thing: "Действительно хотите удалить?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "am/pm"
                        }
                    },
                    draft: "Черновик",
                    errors: {
                        cannot_view_document_inline: "Встроенный просмотр данного документа невозможен, могут отсутствовать разрешения на просмотр, или документ удален.",
                        document_preview_processing: "Предварительный просмотр документа в данный момент обрабатывается. Повторите попытку позже.",
                        field_is_required: "Необходимо это поле",
                        invalid_datetime: "Недопустимое значение даты/времени",
                        invalid_entry_for_field: "Неверная запись: %{field}",
                        invalid_number: "Должно быть числом.",
                        not_a_date: "Это не дата!",
                        posting_message_failed: "Сбой записи, повторите попытку",
                        required: "Обязательное для заполнения поле",
                        search_failed: "Сбой поиска, повторите попытку"
                    },
                    ignore_forever: "Всегда игнорировать",
                    ignore_until_new_submission: "Игнорировать до новой отправки",
                    labels: {
                        datepicker: {
                            time: "Время"
                        }
                    },
                    links: {
                        minimize_file_preview: "Уменьшить просмотр файла",
                        minimize_youtube_video: "Уменьшить видео",
                        view_equella_content_in_new_window: "просмотр содержания в новом окне"
                    },
                    loading: "Загрузка...",
                    no_description: "Описание отсутствует",
                    no_results_found: "Результаты не найдены",
                    status: {
                        diigo_search_throttling: "Diigo имеет ограничение поиска один раз в десять секунд.  Подождите...",
                        posting_message: "Публикация сообщения...",
                        searching: "Идет поиск..."
                    },
                    switched_roles_message: {
                        designer: "Вы временно переключили роли для этого курса и сейчас просматриваете курс как дизайнер.  Можно восстановить роль и разрешения на домашней странице курса.",
                        observer: "Вы временно переключили роли для этого курса и сейчас просматриваете курс как наблюдатель.  Можно восстановить роль и разрешения на домашней странице курса.",
                        student: "Вы временно переключили роли для этого курса и сейчас просматриваете курс как студент.  Можно восстановить роль и разрешения на домашней странице курса.",
                        ta: "Вы временно переключили роли для этого курса и сейчас просматриваете курс как ассистент.  Можно восстановить роль и разрешения на домашней странице курса.",
                        teacher: "Вы временно переключили роли для этого курса и сейчас просматриваете курс как учитель.  Можно восстановить роль и разрешения на домашней странице курса."
                    },
                    titles: {
                        bookmark_search: "Поиск в закладках: %{service_name}",
                        cant_create_recordings: "Невозможно создать записи?",
                        equella_content_preview: "Предварительный просмотр содержания Equella",
                        external_link: "Ссылки на внешний сайт.",
                        image_search: "Поиск изображений: %{service_name}",
                        keyboard_shortcuts: "Клавиши быстрого доступа",
                        preview_document: "Предварительный просмотр документа",
                        search_for_open_resources: "Поиск открытых ресурсов",
                        view_in_new_window: "Просмотр в новом окне"
                    },
                    tooltips: {
                        enter_search_terms: "введите критерии поиска"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 час назад",
                        other: "%{count} часа(ов) назад"
                    },
                    count_minutes_ago: {
                        one: "1 минута назад",
                        other: "%{count} минут(ы) назад"
                    },
                    less_than_a_minute_ago: "меньше минуты назад",
                    pm: "pm"
                }
            },
            "tr-tr": {},
            zh: {
                buttons: {
                    cancel: "取消",
                    "delete": "删除",
                    done: "完成"
                },
                date: {
                    days: {
                        today: "今天",
                        tomorrow: "明天",
                        yesterday: "昨天"
                    }
                },
                instructure: {
                    alerts: {
                        file_previews_disabled: "此 Canvas 网站已禁用文件预览"
                    },
                    browsers: {
                        unrecognized: "无法识别的浏览器"
                    },
                    buttons: {
                        next_module: "下个单元",
                        previous_module: "上个单元",
                        search: "搜索",
                        search_by_tag: "按标签搜索"
                    },
                    confirms: {
                        default_delete_thing: "是否确定要删除它?"
                    },
                    datepicker: {
                        titles: {
                            am_pm: "am/pm"
                        }
                    },
                    draft: "草稿",
                    errors: {
                        cannot_view_document_inline: "此文档无法在线查看，您可能没有查看它的权限或它已被删除。",
                        document_preview_processing: "目前正在处理文档预览，请稍后重试。",
                        field_is_required: "此字段为必填字段",
                        invalid_datetime: "无效的日期/时间值",
                        invalid_entry_for_field: "无效的条目: %{field}",
                        invalid_number: "这应该是数字。",
                        not_a_date: "这不是日期！",
                        posting_message_failed: "发布失败，请重试",
                        required: "必填字段",
                        search_failed: "搜索失败，请重试。"
                    },
                    ignore_forever: "总是忽略",
                    ignore_until_new_submission: "在出现新提交文件之前忽略",
                    labels: {
                        datepicker: {
                            time: "时间"
                        }
                    },
                    links: {
                        minimize_file_preview: "最小化文件预览",
                        minimize_youtube_video: "最小化视频",
                        view_equella_content_in_new_window: "在新窗口中查看内容"
                    },
                    loading: "正在加载...",
                    no_description: "无说明",
                    no_results_found: "未找到结果",
                    status: {
                        diigo_search_throttling: "Diigo 限制用户每十秒搜索一次。请稍候...",
                        posting_message: "正在发布消息...",
                        searching: "正在搜索..."
                    },
                    switched_roles_message: {
                        designer: "您已临时切换此课程的身份，现在以设计者的身份查看课程。您可以从课程主页恢复您的身份和权限。",
                        observer: "您已临时切换此课程的身份，现在以观察员的身份查看课程。您可以从课程主页恢复您的身份和权限。",
                        student: "您已临时切换此课程的身份，现在以学生的身份查看课程。您可以从课程主页恢复您的身份和权限。",
                        ta: "您已临时切换此课程的身份，现在以助教的身份查看课程。您可以从课程主页恢复您的身份和权限。",
                        teacher: "您已临时切换此课程的身份，现在以教师的身份查看课程。您可以从课程主页恢复您的身份和权限。"
                    },
                    titles: {
                        bookmark_search: "书签搜索: %{service_name}",
                        cant_create_recordings: "无法创建录音?",
                        equella_content_preview: "Equella 内容预览",
                        external_link: "链接到外部网站。",
                        image_search: "图像搜索: %{service_name}",
                        keyboard_shortcuts: "键盘快捷方式",
                        preview_document: "预览文档",
                        search_for_open_resources: "搜索开放资源",
                        view_in_new_window: "在新窗口中查看"
                    },
                    tooltips: {
                        enter_search_terms: "搜索搜索条件"
                    }
                },
                time: {
                    am: "上午",
                    count_hours_ago: {
                        one: "%{count} 小时前",
                        other: "%{count} 小时前"
                    },
                    count_minutes_ago: {
                        one: "%{count} 分钟前",
                        other: "%{count} 分钟前"
                    },
                    less_than_a_minute_ago: "不到一分钟前",
                    pm: "下午"
                }
            },
            "zh-hans": {}
        }
    })
}), function () {
    define("compiled/util/dateSelect", ["i18n!instructure", "jquery", "underscore", "str/htmlEscape"], function (a, b, c, d) {
        var e, f;
        return e = {
            year: function (a, c) {
                var d, e, f;
                f = a.startYear < a.endYear ? 1 : -1, d = b("<select />", c), a.includeBlank && d.append("<option />"), e = a.startYear;
                while (e * f <= a.endYear * f) e += f, d.append(b('<option value="' + e + '">' + e + "</option>"));
                return d
            },
            month: function (a, c, e) {
                var f, g, i, j;
                i = e.month_names, f = b("<select />", c), a.includeBlank && f.append("<option />");
                for (g = j = 1; j <= 12; g = ++j) f.append(b('<option value="' + g + '">' + d(i[g]) + "</option>"));
                return f
            },
            day: function (a, c) {
                var d, e, f;
                d = b("<select />", c), a.includeBlank && d.append("<option />");
                for (e = f = 1; f <= 31; e = ++f) d.append(b('<option value="' + e + '">' + e + "</option>"));
                return d
            }
        }, f = function (d, f, g) {
            var h, i, j, k, l, m, n, o, p, q, r, s, t, u;
            g == null && (g = c.clone(f)), o = ["type", "startYear", "endYear", "includeBlank", "order"];
            for (q = 0, s = o.length; q < s; q++) k = o[q], delete g[k];
            (t = g["class"]) == null && (g["class"] = ""), g["class"] += " date-select", p = (new Date).getFullYear(), l = {
                year: 1,
                month: 2,
                day: 3
            }, i = a.lookup("#date"), f.type === "birthdate" && c.defaults(f, {
                startYear: p - 1,
                endYear: p - 125,
                includeBlank: !0
            }), c.defaults(f, {
                startYear: p - 5,
                endYear: p + 5,
                order: i.order || ["year", "month", "day"]
            }), h = b("<span>");
            for (j = r = 0, u = f.order.length; 0 <= u ? r < u : r > u; j = 0 <= u ? ++r : --r) n = f.order[j], m = d.replace(/(\]?)$/, "(" + l[n] + "i)$1"), h.append(e[n](f, c.extend({
                name: m
            }, g), i)), delete g.id;
            return h
        }
    })
}.call(this), define("translations/lib.text_helper", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "إظهار النص المقتبس",
                        word_separator: " "
                    }
                }
            },
            de: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "zitierten Text zeigen",
                        word_separator: " "
                    }
                }
            },
            "el-gr": {},
            "en-AU": {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "show quoted text",
                        word_separator: " "
                    }
                }
            },
            "en-GB": {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "show quoted text",
                        word_separator: " "
                    }
                }
            },
            es: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "mostrar texto citado",
                        word_separator: " "
                    }
                }
            },
            fr: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "afficher le texte entre guillemets",
                        word_separator: " "
                    }
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "引用したテキストを表示",
                        word_separator: " "
                    }
                }
            },
            ko: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "인용된 텍스트 표시",
                        word_separator: " "
                    }
                }
            },
            "ko-kr": {},
            nl: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "toon geciteerde tekst",
                        word_separator: " "
                    }
                }
            },
            pl: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "pokaż cytowany fragment tekstu",
                        word_separator: " "
                    }
                }
            },
            pt: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "exibir texto citado",
                        word_separator: " "
                    }
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "показать цитированный текст",
                        word_separator: " "
                    }
                }
            },
            "tr-tr": {},
            zh: {
                lib: {
                    text_helper: {
                        ellipsis: "...",
                        quoted_text_toggle: "显示引用的文本",
                        word_separator: " "
                    }
                }
            },
            "zh-hans": {}
        }
    })
}), function () {
    define("compiled/str/TextHelper", ["i18n!lib.text_helper", "str/htmlEscape"], function (a, b) {
        var c, d, e;
        return c = "LINK-PLACEHOLDER", d = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))|(LINK-PLACEHOLDER)/gi, e = {
            quoteClump: function (b) {
                return "<div class='quoted_text_holder'>        <a href='#' class='show_quoted_text_link'>" + a.t("quoted_text_toggle", "show quoted text") + "</a>        <div class='quoted_text' style='display: none;'>          " + b.join("\n") + "        </div>      </div>"
            },
            formatMessage: function (a) {
                var f, g, h, i, j, k, l;
                h = [], i = [], a = a.replace(d, function (a, d) {
                    var e;
                    return i.push(a === c ? c : (e = a, e.slice(0, 4) === "www" ? e = "http://" + e : void 0, e = encodeURI(e).replace(/'/g, "%27"), h.push(e), "<a href='" + b(e) + "'>" + b(a) + "</a>")), c
                }), a = b(a), a = a.replace(new RegExp(c, "g"), function (a, b) {
                    return i.shift()
                }), a = a.replace(/\n/g, "<br />\n"), j = [], k = [], l = a.split("\n");
                for (f in l) g = l[f], g.match(/^(&gt;|>)/) ? k.push(g) : (k.length && j.push(e.quoteClump(k)), k = [], j.push(g));
                return k.length && j.push(e.quoteClump(k)), a = j.join("\n")
            },
            delimit: function (a) {
                var b, c, d, e, f;
                if (isNaN(a)) return String(a);
                f = a < 0 ? "-" : "", b = Math.abs(a);
                if (b === Infinity) return String(a);
                c = Math.floor(b), e = b === c ? "" : String(b).replace(/^\d+\./, ".");
                while (c >= 1e3) d = String(c).replace(/\d+(\d\d\d)$/, ",$1"), c = Math.floor(c / 1e3), e = d + e;
                return f + String(c) + e
            },
            truncateText: function (b, c) {
                var d, e, f, g, h, i;
                c == null && (c = {}), e = (i = c.max) != null ? i : 30, d = a.t("ellipsis", "..."), h = a.t("word_separator", " "), b = (b != null ? b : "").replace(/\s+/g, h).trim();
                if (!b || b.length <= e) return b;
                g = 0;
                for (;;) {
                    f = b.indexOf(h, g + 1);
                    if (f < 0 || f > e - d.length) break;
                    g = f
                }
                return g || (g = e - d.length), b.substring(0, g) + d
            }
        }
    })
}.call(this), define("vendor/jquery.ba-tinypubsub", ["jquery"], function (a) {
    var b = a({}),
        c, d, e;
    return a.subscribe = c = function (d, e) {
        function f() {
            return e.apply(this, Array.prototype.slice.call(arguments, 1))
        }
        if (a.isPlainObject(d)) return a.each(d, function (a, b) {
            c(a, b)
        });
        f.guid = e.guid = e.guid || a.guid++, b.bind(d, f)
    }, a.unsubscribe = d = function () {
        b.unbind.apply(b, arguments)
    }, a.publish = e = function () {
        b.trigger.apply(b, arguments)
    }, {
        subscribe: c,
        unsubscribe: d,
        publish: e
    }
}), define("translations/help_dialog", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                help_dialog: {
                    Back: "عودة",
                    Help: "تعليمات",
                    Submitting_Ticket: "يجري إرسال البطاقة...",
                    description: "الوصف",
                    extreme_critical_emergency: "طوارئ شديدة الخطورة!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "تقديم بطاقة لطلب استجابة شخصية من فريق الدعم لدينا",
                    for_an_instant_answer: "للحصول على إجابة فورية:",
                    how_is_this_affecting_you: "كيف يؤثر هذا عليك؟",
                    i_cant_get_things_done_until_i_hear_back_from_you: "لن أستطيع إنجاز أعمالي حتى تردون عليّ",
                    i_need_some_help_but_its_not_urgent: "أحتاج بعض المساعدة لكن الأمر غير عاجل",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "قم بتضمين ارتباط إلى لقطة شاشة/تسجيل رقمي لمخرجات الشاشة باستخدام شيء مثل *Jing*.",
                    just_a_casual_question_comment_idea_suggestion: "مجرد سؤال عابر، أو تعليق أو فكرة أو اقتراح",
                    message: "الرسالة",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "سيتم إرسال الرسالة إلى كل المدرسين/مساعدي المدرسين الذين في المساق.",
                    please_select_one: "الرجاء تحديد واحدة...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "انظر لعل مشكلتك قد تم حلها في *أدلة Canvas*.",
                    send_message: "إرسال رسالة",
                    sending: "جارٍ الإرسال...",
                    somethings_broken_but_i_can_work_around_it_for_now: "حدث تلف بشيء ما لكني أستطيع تدبير الأمر الآن",
                    subject: "الموضوع",
                    submit_this_support_request: "إرسال البطاقة",
                    which_course_is_this_question_about: "أي مساق يدور حوله هذا السؤال؟",
                    your_email_address: "بريدك الإلكتروني"
                }
            },
            de: {
                help_dialog: {
                    Back: "Zurück",
                    Help: "Hilfe",
                    Submitting_Ticket: "Anfrage wird eingesandt...",
                    description: "Beschreibung",
                    extreme_critical_emergency: "EXTREM KRITISCHER NOTFALL!!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "Eine Anfrage an unser Supportteam senden",
                    for_an_instant_answer: "Für eine sofortige Antwort:",
                    how_is_this_affecting_you: "Welche Auswirkung hat dies auf sie?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "Ich benötige eine Antwort, um die Arbeit fortzusetzen",
                    i_need_some_help_but_its_not_urgent: "Ich benötige Hilfe, es ist aber nicht dringend",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Einen Link zu einem Screenshots einfügen, z.B. mit *Jing*.",
                    just_a_casual_question_comment_idea_suggestion: "Nur eine beiläufige Frage/ Kommentar/ Idee/ Vorschlag",
                    message: "Nachricht",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "Die Nachricht wird an alle Dozenten / Lehrassistenten des Kurses versandt.",
                    please_select_one: "Bitte auswählen...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "Überprüfen Sie, ob sich im *Canvas-leitfaden* eine Lösung zu Ihrem Problem findet.",
                    send_message: "Nachricht senden",
                    sending: "Wird verschickt...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Etwas ist defekt, aber ich kann trotzdem erst einmal weiterarbeiten",
                    subject: "Betreff",
                    submit_this_support_request: "Anfrage einsenden",
                    which_course_is_this_question_about: "Auf welchen Kurs bezieht sich diese Frage?",
                    your_email_address: "Ihre E-mailadresse"
                }
            },
            "el-gr": {},
            "en-AU": {
                help_dialog: {
                    Back: "Back",
                    Help: "Help",
                    Submitting_Ticket: "Submitting Ticket...",
                    description: "Description",
                    extreme_critical_emergency: "EXTREME CRITICAL EMERGENCY!!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "File a ticket for a personal response from our support team",
                    for_an_instant_answer: "For an instant answer:",
                    how_is_this_affecting_you: "How is this affecting you?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "I can't get things done until I hear back from you",
                    i_need_some_help_but_its_not_urgent: "I need some help but it's not urgent",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Include a link to a screencast/screenshot using something like *Jing*.",
                    just_a_casual_question_comment_idea_suggestion: "Just a casual question, comment, idea, suggestion",
                    message: "Message",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "Message will be sent to all the Teachers / TA's in the course.",
                    please_select_one: "Please select one...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "See if your issue is addressed in the *Canvas Guides*.",
                    send_message: "Send Message",
                    sending: "Sending...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Something's broken but I can work around it for now",
                    subject: "Subject",
                    submit_this_support_request: "Submit Ticket",
                    which_course_is_this_question_about: "Which course is this question about?",
                    your_email_address: "Your email address"
                }
            },
            "en-GB": {
                help_dialog: {
                    Back: "Back",
                    Help: "Help",
                    Submitting_Ticket: "Submitting ticket...",
                    description: "Description",
                    extreme_critical_emergency: "EXTREME CRITICAL EMERGENCY!!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "File a ticket for a personal response from our support team",
                    for_an_instant_answer: "For an instant answer:",
                    how_is_this_affecting_you: "How is this affecting you?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "I can't get things done until I hear back from you",
                    i_need_some_help_but_its_not_urgent: "I need some help but it's not urgent",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Include a link to a screencast/screenshot using something like *Jing*.",
                    just_a_casual_question_comment_idea_suggestion: "Just a casual question, comment, idea, suggestion",
                    message: "Message",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "Message will be sent to all the teachers / TA's in the course.",
                    please_select_one: "Please select one...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "See if your issue is addressed in the *Canvas Guides*.",
                    send_message: "Send message",
                    sending: "Sending...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Something's broken but I can work around it for now",
                    subject: "Subject",
                    submit_this_support_request: "Submit tbicket",
                    which_course_is_this_question_about: "Which course is this question about?",
                    your_email_address: "Your email address"
                }
            },
            es: {
                help_dialog: {
                    Back: "Volver",
                    Help: "Ayuda",
                    Submitting_Ticket: "Enviando ticket...",
                    description: "Descripción",
                    extreme_critical_emergency: "EMERGENCIA CRITICA",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "Presentar un ticket para obtener una respuesta personal de nuestro equipo de asistencia técnica",
                    for_an_instant_answer: "Para obtener una respuesta inmediata:",
                    how_is_this_affecting_you: "¿Cómo le afecta esto?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "No puedo hacer nada hasta que me conteste",
                    i_need_some_help_but_its_not_urgent: "Necesito algo de ayuda, pero no es urgente",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Incluya un enlace a una captura de pantalla, usando algo similar *Jing*.",
                    just_a_casual_question_comment_idea_suggestion: "Solo una pregunta, comentario, idea o sugerencia informal",
                    message: "Mensaje",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "El mensaje será enviado a todos los profesores/APs del curso",
                    please_select_one: "Seleccione uno...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "Compruebe si la solución a su problema se encuentra en las *Guías de Canvas*.",
                    send_message: "Enviar Mensaje",
                    sending: "Enviando...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Algo no está funcionando, pero puedo seguir trabajando por ahora",
                    subject: "Tema",
                    submit_this_support_request: "Enviar ticket",
                    which_course_is_this_question_about: "¿A qué curso corresponde esta pregunta?",
                    your_email_address: "Su dirección de correo electrónico"
                }
            },
            fr: {
                help_dialog: {
                    Back: "Précédent",
                    Help: "Aide",
                    Submitting_Ticket: "Envoi du ticket...",
                    description: "Description",
                    extreme_critical_emergency: "EXTRÊMEMENT URGENT !!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "Présenter un ticket pour obtenir une réponse personnelle de notre équipe d’assistance technique",
                    for_an_instant_answer: "Pour une réponse instantanée :",
                    how_is_this_affecting_you: "Dans quelle mesure cela vous affecte-t-il ?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "Je ne peux pas continuer mon travail avant d’avoir reçu une réponse de votre part",
                    i_need_some_help_but_its_not_urgent: "J’ai besoin d’aide, mais ce n’est pas urgent",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Ajoutez un lien vers une capture vidéo/d’écran à l’aide de *Jing* par exemple.",
                    just_a_casual_question_comment_idea_suggestion: "Il s’agit seulement d’une question informelle, d’un commentaire, d’une idée, d’une suggestion",
                    message: "Message",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "Le message va être envoyé à tous les enseignants/assistants du cours.",
                    please_select_one: "Veuillez sélectionner une option...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "Vérifiez si votre question est traitée dans les *manuels Canvas*.",
                    send_message: "Envoyer le message",
                    sending: "Envoi en cours...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Quelque chose ne fonctionne plus, mais je peux y remédier pour le moment",
                    subject: "Objet",
                    submit_this_support_request: "Envoyer le ticket",
                    which_course_is_this_question_about: "À quel cours cette question se rapporte-t-elle ?",
                    your_email_address: "Votre adresse e-mail"
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                help_dialog: {
                    Back: "戻る",
                    Help: "ヘルプ",
                    Submitting_Ticket: "チケットを提出しています...",
                    description: "説明",
                    extreme_critical_emergency: "極めて重要な緊急事態",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "サポート チームからの個人向け応答のチケットを保存",
                    for_an_instant_answer: "すぐに回答がほしい場合:",
                    how_is_this_affecting_you: "この問題はどのくらい深刻ですか?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "回答があるまで何もできません",
                    i_need_some_help_but_its_not_urgent: "支援が必要ですが、緊急ではありません",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "*Jing* などを使用するスクリーンキャスト/スクリーンショットへのリンクを含めます。",
                    just_a_casual_question_comment_idea_suggestion: "質問、コメント、アイデア、提案など気軽にお寄せください。",
                    message: "メッセージ",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "メッセージはコースのすべての講師/TA に送信されます。",
                    please_select_one: "1 つ選択してください...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "問題の対処方法が *Canvas ガイド* に記載されているかどうかを調べます。",
                    send_message: "メッセージの送信",
                    sending: "送信しています...",
                    somethings_broken_but_i_can_work_around_it_for_now: "問題がありましたが、現在は回避できています",
                    subject: "科目",
                    submit_this_support_request: "チケットの提出",
                    which_course_is_this_question_about: "これはどのコースについての質問ですか?",
                    your_email_address: "電子メール アドレス"
                }
            },
            ko: {
                help_dialog: {
                    Back: "뒤로",
                    Help: "도움말",
                    Submitting_Ticket: "티켓 제출 중...",
                    description: "설명",
                    extreme_critical_emergency: "매우 급한 상황입니다!!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "지원팀에게 답변을 받기 위해서는 티켓을 등록하십시오.",
                    for_an_instant_answer: "빠른 답변을 위해서:",
                    how_is_this_affecting_you: "이것이 여러분에게 미치는 영향은 무엇입니까?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "이야기를 듣기 전에 작업을 마칠 수 없음",
                    i_need_some_help_but_its_not_urgent: "도움이 필요하지만 급한 것은 아님",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "*Jing*과 같은 것을 이용해서 스크린캐스트/스크린샷에 대한 링크를 포합합니다.",
                    just_a_casual_question_comment_idea_suggestion: "일반적인 질문, 의견, 아이디어, 제안",
                    message: "메시지",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "과목에 있는 모든 교사와 조교에게 메시지를 보냅니다.",
                    please_select_one: "하나를 선택하십시오...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "*Canvas 가이드*에서 이슈를 언급하고 있는지 확인하십시오.",
                    send_message: "메시지 보내기",
                    sending: "보내는 중...",
                    somethings_broken_but_i_can_work_around_it_for_now: "무엇인가 잘못되었지만 임시 해결책이 있음",
                    subject: "제목",
                    submit_this_support_request: "티켓 제출",
                    which_course_is_this_question_about: "이 질문은 어떤 과목에 대한 것입니까?",
                    your_email_address: "이메일 주소"
                }
            },
            "ko-kr": {},
            nl: {
                help_dialog: {
                    Back: "Terug",
                    Help: "Help",
                    Submitting_Ticket: "Ticket wordt verstuurd...",
                    description: "Beschrijving",
                    extreme_critical_emergency: "NOODGEVAL!!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "Dien een ticket in om een reactie te krijgen van onze helpdesk",
                    for_an_instant_answer: "Voor een direct antwoord:",
                    how_is_this_affecting_you: "Wat voor gevolgen heeft het probleem?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "Ik kan niets doen tot ik een antwoord krijg",
                    i_need_some_help_but_its_not_urgent: "Ik heb hulp nodig, maar het is niet urgent",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Voeg een link naar een screencast/screenshot toe met behulp van bijvoorbeeld *Jing*.",
                    just_a_casual_question_comment_idea_suggestion: "Een gewone vraag, opmerking, idee of suggestie",
                    message: "Bericht",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "Bericht wordt verstuurd naar alle docenten/onderwijsassistent in de cursus.",
                    please_select_one: "Selecteer een optie...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "Kijk of het probleem vermeld wordt in de *Canvas-handleidingen*.",
                    send_message: "Verstuur bericht",
                    sending: "Bezig met versturen...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Er is iets kapot, maar ik kan er omheen werken",
                    subject: "Onderwerp",
                    submit_this_support_request: "Verstuur ticket",
                    which_course_is_this_question_about: "Over welke cursus gaat de vraag?",
                    your_email_address: "Uw e-mailadres"
                }
            },
            pl: {
                help_dialog: {
                    Back: "Wstecz",
                    Help: "Pomoc",
                    Submitting_Ticket: "Przesyłanie zgłoszenia...",
                    description: "Opis",
                    extreme_critical_emergency: "EKSTREMALNIE KRYTYCZNA SYTUACJA!!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "Wyślij zgłoszenie do naszego zespołu pomocy",
                    for_an_instant_answer: "Do natychmiastowej odpowiedzi:",
                    how_is_this_affecting_you: "W jaki sposób wpływa to na Ciebie?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "Nie mogę skończyć pracy, dopóki nie otrzymam tej informacji.",
                    i_need_some_help_but_its_not_urgent: "Potrzebuję pomocy, ale to nic pilnego",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Dołącz łącze do screencastu/zrzutu ekranu, używając programu typu *Jing*",
                    just_a_casual_question_comment_idea_suggestion: "Tylko doraźne pytanie, komentarz, pomysł, propozycja",
                    message: "Wiadomość",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "Wiadomość zostanie wysłana do wszytskich nauczycieli/nauczycieli-administratorów w tym kursie",
                    please_select_one: "Wybierz jedno...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "Sprawdź, czy rozwiązanie problemu znajduję się w *przewodniku Canvas*.",
                    send_message: "Wyślij wiadomość",
                    sending: "Trwa wysyłanie...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Coś się zepsuło, ale mogę to chwilowo obejść",
                    subject: "Temat",
                    submit_this_support_request: "Wyślij zgłoszenie",
                    which_course_is_this_question_about: "Którego kursu dotyczy pytanie?",
                    your_email_address: "Twój adres email"
                }
            },
            pt: {
                help_dialog: {
                    Back: "Voltar",
                    Help: "Ajuda",
                    Submitting_Ticket: "A enviar bilhete...",
                    description: "Descrição",
                    extreme_critical_emergency: "EMERGÊNCIA CRÍTICA EXTREMA!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "Registe um bilhete para obter uma resposta pessoal da nossa equipa de suporte",
                    for_an_instant_answer: "Para uma resposta imediata:",
                    how_is_this_affecting_you: "De que forma é que este problema o está a afetar?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "Não posso fazer nada até ter uma resposta vossa",
                    i_need_some_help_but_its_not_urgent: "Preciso de ajuda, mas não é urgente",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Inclua uma ligação a uma gravação/captura de ecrã utilizando o *Jing* ou um programa semelhante.",
                    just_a_casual_question_comment_idea_suggestion: "Pergunta casual, comentário, ideia, sugestão",
                    message: "Mensagem",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "A mensagem será enviada a todos os Professores/Assistentes da disciplina.",
                    please_select_one: "Selecione um...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "Veja se o seu problema é abordado nos *Guias do Canvas*.",
                    send_message: "Enviar mensagem",
                    sending: "Enviando...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Algo não está a funcionar bem, mas posso contornar o problema por enquanto",
                    subject: "Assunto",
                    submit_this_support_request: "Enviar bilhete",
                    which_course_is_this_question_about: "A que disciplina se refere esta pergunta?",
                    your_email_address: "Endereço de e-mail"
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                help_dialog: {
                    Back: "Назад",
                    Help: "Помощь",
                    Submitting_Ticket: "Отправка заявки...",
                    description: "Описание",
                    extreme_critical_emergency: "НУЖНА СРОЧНАЯ ПОМОЩЬ!!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "Заполните заявку на персональный ответ от нашей службы поддержки",
                    for_an_instant_answer: "Для мгновенного ответа:",
                    how_is_this_affecting_you: "Как это влияет на вас?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "Я не могу закончить, пока не услышу ваш ответ",
                    i_need_some_help_but_its_not_urgent: "Мне необходима помощь, но это не срочно",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "Включите ссылку на скринкаст / скриншоте, используя что-то вроде *jing*.",
                    just_a_casual_question_comment_idea_suggestion: "Только случайные вопросы, комментарии, идеи, предложения",
                    message: "Сообщение",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "Сообщение будет отправлено всем учителям / ассистентам учителей данного курса",
                    please_select_one: "Пожалуйста, выберите один ...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "Проверьте, нет ли ответа на ваш вопрос в *Руководстве пользователя Canvas*.",
                    send_message: "Отправить сообщение",
                    sending: "Отправка...",
                    somethings_broken_but_i_can_work_around_it_for_now: "Что-то сломалось, но пока что я могу обойтись без помощи",
                    subject: "Описание",
                    submit_this_support_request: "Отправить заявку",
                    which_course_is_this_question_about: "О каком курсе ваш вопрос?",
                    your_email_address: "Адрес вашей электронной почты"
                }
            },
            "tr-tr": {},
            zh: {
                help_dialog: {
                    Back: "返回",
                    Help: "帮助",
                    Submitting_Ticket: "正在提交任务单...",
                    description: "说明",
                    extreme_critical_emergency: "极其严重的紧急情况!!",
                    file_a_ticket_for_a_personal_response_from_our_support_team: "给任务单归档，以获得我们支持团队的个人响应",
                    for_an_instant_answer: "即时回答:",
                    how_is_this_affecting_you: "此内容对您有多大影响?",
                    i_cant_get_things_done_until_i_hear_back_from_you: "我需要您的回信才能完成工作",
                    i_need_some_help_but_its_not_urgent: "我需要帮助，但问题不算紧急",
                    include_a_link_to_a_screencast_or_screenshot_using_something_like_jing: "使用 *Jing* 等方式在截屏/截屏视频中包含链接",
                    just_a_casual_question_comment_idea_suggestion: "只是一个随意的问题、评论、想法或建议",
                    message: "消息",
                    message_will_be_sent_to_all_the_teachers_tas_in_the_course: "消息将发送给课程中所有的老师/助教。",
                    please_select_one: "请选择一个...",
                    see_if_your_issue_is_addressed_in_the_canvas_guides: "看看能否在 *Canvas 指南*中找到您的问题答案。",
                    send_message: "发送邮件",
                    sending: "正在发送...",
                    somethings_broken_but_i_can_work_around_it_for_now: "有些内容已损坏，不过现在我可以自己解决了",
                    subject: "主题",
                    submit_this_support_request: "提交任务单 ",
                    which_course_is_this_question_about: "此问题与哪门课程有关?",
                    your_email_address: "您的电子邮件地址"
                }
            },
            "zh-hans": {}
        }
    })
}), function () {
    define("compiled/fn/preventDefault", [], function () {
        var a;
        return a = function (a) {
            return function (b) {
                return b != null && b.preventDefault(), a.apply(this, arguments)
            }
        }
    })
}.call(this), define("vendor/spin", [], function () {
    function d(a, b) {
        var c = document.createElement(a || "div"),
            d;
        for (d in b) c[d] = b[d];
        return c
    }
    function e(a) {
        for (var b = 1, c = arguments.length; b < c; b++) a.appendChild(arguments[b]);
        return a
    }
    function g(a, d, e, g) {
        var h = ["opacity", d, ~~ (a * 100), e, g].join("-"),
            i = .01 + e / g * 100,
            j = Math.max(1 - (1 - a) / d * (100 - i), a),
            k = c.substring(0, c.indexOf("Animation")).toLowerCase(),
            l = k && "-" + k + "-" || "";
        return b[h] || (f.insertRule("@" + l + "keyframes " + h + "{" + "0%{opacity:" + j + "}" + i + "%{opacity:" + a + "}" + (i + .01) + "%{opacity:1}" + (i + d) % 100 + "%{opacity:" + a + "}" + "100%{opacity:" + j + "}" + "}", 0), b[h] = 1), h
    }
    function h(b, c) {
        var d = b.style,
            e, f;
        if (d[c] !== undefined) return c;
        c = c.charAt(0).toUpperCase() + c.slice(1);
        for (f = 0; f < a.length; f++) {
            e = a[f] + c;
            if (d[e] !== undefined) return e
        }
    }
    function i(a, b) {
        for (var c in b) a.style[h(a, c) || c] = b[c];
        return a
    }
    function j(a) {
        for (var b = 1; b < arguments.length; b++) {
            var c = arguments[b];
            for (var d in c) a[d] === undefined && (a[d] = c[d])
        }
        return a
    }
    function k(a) {
        var b = {
            x: a.offsetLeft,
            y: a.offsetTop
        };
        while (a = a.offsetParent) b.x += a.offsetLeft, b.y += a.offsetTop;
        return b
    }
    var a = ["webkit", "Moz", "ms", "O"],
        b = {},
        c, f = function () {
            var a = d("style");
            return e(document.getElementsByTagName("head")[0], a), a.sheet || a.styleSheet
        }(),
        l = {
            lines: 12,
            length: 7,
            width: 5,
            radius: 10,
            rotate: 0,
            color: "#000",
            speed: 1,
            trail: 100,
            opacity: .25,
            fps: 20,
            zIndex: 2e9,
            className: "spinner",
            top: "auto",
            left: "auto"
        },
        m = function n(a) {
            if (!this.spin) return new n(a);
            this.opts = j(a || {}, n.defaults, l)
        };
    return m.defaults = {}, j(m.prototype, {
        spin: function (a) {
            this.stop();
            var b = this,
                e = b.opts,
                f = b.el = i(d(0, {
                    className: e.className
                }), {
                    position: "relative",
                    zIndex: e.zIndex
                }),
                g = e.radius + e.length + e.width,
                h, j;
            a && (a.insertBefore(f, a.firstChild || null), j = k(a), h = k(f), i(f, {
                left: (e.left == "auto" ? j.x - h.x + (a.offsetWidth >> 1) : e.left + g) + "px",
                top: (e.top == "auto" ? j.y - h.y + (a.offsetHeight >> 1) : e.top + g) + "px"
            })), f.setAttribute("aria-role", "progressbar"), b.lines(f, b.opts);
            if (!c) {
                var l = 0,
                    m = e.fps,
                    n = m / e.speed,
                    o = (1 - e.opacity) / (n * e.trail / 100),
                    p = n / e.lines;
                !
                function q() {
                    l++;
                    for (var a = e.lines; a; a--) {
                        var c = Math.max(1 - (l + a * p) % n * o, e.opacity);
                        b.opacity(f, e.lines - a, c, e)
                    }
                    b.timeout = b.el && setTimeout(q, ~~ (1e3 / m))
                }()
            }
            return b
        },
        stop: function () {
            var a = this.el;
            return a && (clearTimeout(this.timeout), a.parentNode && a.parentNode.removeChild(a), this.el = undefined), this
        },
        lines: function (a, b) {
            function j(a, c) {
                return i(d(), {
                    position: "absolute",
                    width: b.length + b.width + "px",
                    height: b.width + "px",
                    background: a,
                    boxShadow: c,
                    transformOrigin: "left",
                    transform: "rotate(" + ~~ (360 / b.lines * f + b.rotate) + "deg) translate(" + b.radius + "px" + ",0)",
                    borderRadius: (b.width >> 1) + "px"
                })
            }
            var f = 0,
                h;
            for (; f < b.lines; f++) h = i(d(), {
                position: "absolute",
                top: 1 + ~ (b.width / 2) + "px",
                transform: b.hwaccel ? "translate3d(0,0,0)" : "",
                opacity: b.opacity,
                animation: c && g(b.opacity, b.trail, f, b.lines) + " " + 1 / b.speed + "s linear infinite"
            }), b.shadow && e(h, i(j("#000", "0 0 4px #000"), {
                top: "2px"
            })), e(a, e(h, j(b.color, "0 0 1px rgba(0,0,0,.1)")));
            return a
        },
        opacity: function (a, b, c) {
            b < a.childNodes.length && (a.childNodes[b].style.opacity = c)
        }
    }), !
    function () {
        function a(a, b) {
            return d("<" + a + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', b)
        }
        var b = i(d("group"), {
            behavior: "url(#default#VML)"
        });
        !h(b, "transform") && b.adj ? (f.addRule(".spin-vml", "behavior:url(#default#VML)"), m.prototype.lines = function (b, c) {
            function g() {
                return i(a("group", {
                    coordsize: f + " " + f,
                    coordorigin: -d + " " + -d
                }), {
                    width: f,
                    height: f
                })
            }
            function l(b, f, h) {
                e(j, e(i(g(), {
                    rotation: 360 / c.lines * b + "deg",
                    left: ~~f
                }), e(i(a("roundrect", {
                    arcsize: 1
                }), {
                    width: d,
                    height: c.width,
                    left: c.radius,
                    top: -c.width >> 1,
                    filter: h
                }), a("fill", {
                    color: c.color,
                    opacity: c.opacity
                }), a("stroke", {
                    opacity: 0
                }))))
            }
            var d = c.length + c.width,
                f = 2 * d,
                h = -(c.width + c.length) * 2 + "px",
                j = i(g(), {
                    position: "absolute",
                    top: h,
                    left: h
                }),
                k;
            if (c.shadow) for (k = 1; k <= c.lines; k++) l(k, -2, "progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");
            for (k = 1; k <= c.lines; k++) l(k);
            return e(b, j)
        }, m.prototype.opacity = function (a, b, c, d) {
            var e = a.firstChild;
            d = d.shadow && d.lines || 0, e && b + d < e.childNodes.length && (e = e.childNodes[b + d], e = e && e.firstChild, e = e && e.firstChild, e && (e.opacity = c))
        }) : c = h(b, "animation")
    }(), window.Spinner = m, m
}), define("vendor/jquery.spin", ["jquery", "vendor/spin"], function (a, b) {
    a.fn.spin = function (c) {
        return this.each(function () {
            var d = a(this),
                e = d.data();
            e.spinner && (e.spinner.stop(), delete e.spinner);
            if (c !== !1) {
                var f = a.css(this, "display");
                d.show(), e.spinner = (new b(a.extend({
                    color: d.css("color")
                }, c))).spin(this), d.css("display", f)
            }
        })
    }
}), function () {
    define("compiled/tours", ["require"], function (a) {
        return {
            init: function () {
                var b, c, d, e, f;
                if (!ENV.TOURS) return;
                e = ENV.TOURS, f = [];
                for (c = 0, d = e.length; c < d; c++) b = e[c], f.push(a(["compiled/views/tours/" + b], function (a) {
                    return new a({
                        name: b
                    })
                }));
                return f
            }
        }
    })
}.call(this), define("translations/_core_en", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {},
            de: {},
            "el-gr": {},
            en: {
                date: {
                    abbr_day_names: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
                    abbr_month_names: [null, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
                    day_names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
                    days: {
                        today_lower: "today"
                    },
                    formats: {
                        date_at_time: "%b %-d at %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %-d, %Y",
                        long_with_weekday: "%A, %B %-d",
                        medium: "%b %-d, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %-d",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
                    order: ["year", "month", "day"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "about 1 hour",
                            other: "about %{count} hours"
                        },
                        about_x_months: {
                            one: "about 1 month",
                            other: "about %{count} months"
                        },
                        about_x_years: {
                            one: "about 1 year",
                            other: "about %{count} years"
                        },
                        almost_x_years: {
                            one: "almost 1 year",
                            other: "almost %{count} years"
                        },
                        half_a_minute: "half a minute",
                        less_than_x_minutes: {
                            one: "less than a minute",
                            other: "less than %{count} minutes"
                        },
                        less_than_x_seconds: {
                            one: "less than 1 second",
                            other: "less than %{count} seconds"
                        },
                        over_x_years: {
                            one: "over 1 year",
                            other: "over %{count} years"
                        },
                        x_days: {
                            one: "1 day",
                            other: "%{count} days"
                        },
                        x_minutes: {
                            one: "1 minute",
                            other: "%{count} minutes"
                        },
                        x_months: {
                            one: "1 month",
                            other: "%{count} months"
                        },
                        x_seconds: {
                            one: "1 second",
                            other: "%{count} seconds"
                        }
                    },
                    prompts: {
                        day: "Day",
                        hour: "Hour",
                        minute: "Minute",
                        month: "Month",
                        second: "Seconds",
                        year: "Year"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            precision: 2,
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        precision: 3,
                        separator: "."
                    },
                    human: {
                        format: {
                            delimiter: "",
                            precision: 1
                        },
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "Byte",
                                    other: "Bytes"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    },
                    percentage: {
                        format: {
                            delimiter: ""
                        }
                    },
                    precision: {
                        format: {
                            delimiter: ""
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", and ",
                        or: {
                            last_word_connector: ", or ",
                            two_words_connector: " or "
                        },
                        two_words_connector: " and ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Interact with and get assistance from your peers.",
                        community_support_forums: "Community Support Forums",
                        contact_support: "Contact Support",
                        contact_support_sub_text: "Get assistance with time-sensitive issues.",
                        curriculum_assessment_errata: "Curriculum/Assessment Errata",
                        curriculum_assessment_errata_description: 'View already reported assessment and curricula errors. Search for "errata."',
                        networking_academy_description: "View Cisco answers to the most commonly asked questions.",
                        networking_academy_faqs: "Networking Academy FAQs"
                    },
                    select: {
                        prompt: "Please select"
                    }
                },
                time: {
                    am: "am",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    pm: "pm"
                }
            },
            "en-AU": {},
            "en-GB": {},
            es: {},
            fr: {},
            hi: {},
            hu: {},
            "it-it": {},
            ja: {},
            ko: {},
            "ko-kr": {},
            nl: {},
            pl: {},
            pt: {},
            "pt-pt": {},
            "ro-ro": {},
            ru: {},
            "tr-tr": {},
            zh: {},
            "zh-hans": {}
        }
    })
}), define("jquery.ajaxJSON", ["INST", "jquery"], function (a, b) {
    function d(a) {
        var c = a.getResponseHeader("X-CSRF-Token");
        c && (ENV.AUTHENTICITY_TOKEN = c, b("#ajax_authenticity_token").text(c))
    }
    var c = b.getJSON;
    b.getJSON = function (a, d, e) {
        var f = c.apply(b, arguments);
        return b.ajaxJSON.storeRequest(f, a, "GET", d), f
    }, b.ajaxJSON = function (a, c, e, f, g, h) {
        e = e || {};
        if (!a && g) {
            g(null, null, "URL required for requests", null);
            return
        }
        a = a || ".", c != "GET" && (e._method = c, c = "POST", e.authenticity_token || (e.authenticity_token = b("#ajax_authenticity_token").text())), b("#page_view_id").length > 0 && !e.page_view_id && (!h || !h.skipPageViewLog) && (e.page_view_id = b("#page_view_id").text());
        var i = function (a, c, d) {
                var e = a;
                if (a.responseText) {
                    var f = a.responseText.replace(/(<([^>]+)>)/ig, "");
                    e = {
                        message: f
                    };
                    try {
                        e = b.parseJSON(a.responseText)
                    } catch (i) {}
                }
                h && h.skipDefaultError && b.ajaxJSON.ignoredXHRs.push(a), g && b.isFunction(g) ? g(e, a, c, d) : b.ajaxJSON.unhandledXHRs.push(a)
            },
            j = {
                url: a,
                dataType: "json",
                type: c,
                success: function (a, c, e) {
                    d(e), a = a || {};
                    var g = null;
                    e && e.getResponseHeader && (g = e.getResponseHeader("X-Canvas-Page-View-Id")) && setTimeout(function () {
                        b(document).triggerHandler("page_view_id_received", g)
                    }, 50), !a.length && a.errors ? (i(a.errors, null, ""), !h || !h.skipDefaultError ? b.fn.defaultAjaxError.func.call(b.fn.defaultAjaxError.object, null, a, "0", a.errors) : b.ajaxJSON.ignoredXHRs.push(e)) : f && b.isFunction(f) && f(a, e)
                },
                error: function (a) {
                    d(a), i.apply(this, arguments)
                },
                complete: function (a) {},
                data: e
            };
        h && h.timeout && (j.timeout = h.timeout), h && h.contentType && (j.contentType = h.contentType);
        var k = b.ajax(j);
        return b.ajaxJSON.storeRequest(k, a, c, e), k
    }, b.ajaxJSON.unhandledXHRs = [], b.ajaxJSON.ignoredXHRs = [], b.ajaxJSON.passedRequests = [], b.ajaxJSON.storeRequest = function (a, c, d, e) {
        b.ajaxJSON.passedRequests.push({
            xhr: a,
            url: c,
            submit_type: d,
            data: e
        })
    }, b.ajaxJSON.findRequest = function (a) {
        var c = b.ajaxJSON.passedRequests;
        for (var d in c) if (c[d] && c[d].xhr == a) return c[d];
        return null
    }, b.fn.defaultAjaxError = function (c) {
        b.fn.defaultAjaxError.object = this, b.fn.defaultAjaxError.func = function (d, e, f, g) {
            var h = a.environment == "production",
                i = b.inArray(e, b.ajaxJSON.unhandledXHRs) != -1,
                j = b.inArray(e, b.ajaxJSON.ignoredXHRs) != -1;
            if ((!h || i) && !j) {
                b.ajaxJSON.unhandledXHRs = b.grep(b.ajaxJSON.unhandledXHRs, function (a, b) {
                    return a != e
                });
                var k = !1;
                i || (k = !0), c.call(this, d, e, f, g, k)
            }
        }, this.ajaxError(b.fn.defaultAjaxError.func)
    }
}), define("jquery.disableWhileLoading", ["i18n!instructure", "compiled/util/objectCollection", "jquery", "jquery.ajaxJSON", "vendor/jquery.spin"], function (a, b, c) {
    c.fn.disableWhileLoading = function (d, e) {
        return this.each(function () {
            var f = c.extend(!0, {}, c.fn.disableWhileLoading.defaults, e),
                g = c(this),
                h = g.data(),
                i = h.disabledWhileLoadingDeferreds || (h.disabledWhileLoadingDeferreds = b([])),
                j = c.Deferred();
            c.when.apply(c, i).done(function () {
                var b = "disabled_" + c.guid++,
                    h = g.add(g.nextAll(".ui-dialog-buttonpane")),
                    k = h.find("*").andSelf().filter(":input").not(":disabled,[type=file]"),
                    l = g.find(".spin_holder"),
                    m = l.length ? l : g,
                    n = m.css("display"),
                    o = !1,
                    p = setTimeout(function () {
                        o = !0, k.prop("disabled", !0), m.show().spin(e), c(m.data().spinner.el).css({
                            "max-width": "100px"
                        }), h.css("opacity", function (a, d) {
                            return c(this).data(b + "opacityBefore", this.style.opacity || 1), f.opacity
                        }), c.each(f.buttons, function (d, e) {
                            c.isArray(f.buttons) && (d = e, e = null), h.find(d).text(function (d, f) {
                                return c(this).data(b, f), e || c(this).data("textWhileLoading") || c(this).is(".ui-button-text") && c(this).closest(".ui-button").data("textWhileLoading") || a.t("loading", "Loading...")
                            })
                        })
                    }, 13);
                c.when(d).always(function () {
                    clearTimeout(p), o && (m.css("display", n).spin(!1), h.css("opacity", function () {
                        return c(this).data(b + "opacityBefore") || 1
                    }), k.prop("disabled", !1), c.each(f.buttons, function (a, d) {
                        if (typeof a == "number") var a = "" + this;
                        h.find(a).text(function () {
                            return c(this).data(b)
                        })
                    }), i.erase(j), j.resolve())
                })
            }), i.push(j)
        })
    }, c.fn.disableWhileLoading.defaults = {
        opacity: .5,
        buttons: ['button[type="submit"], .ui-dialog-buttonpane .ui-button .ui-button-text']
    }
}), function () {
    if (!("console" in window)) {
        var a = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
        window.console = {};
        for (var b = 0; b < a.length; b++) window.console[a[b]] = function () {}
    }
}(), define("vendor/firebugx", function () {}), define("jquery.google-analytics", ["INST", "jquery"], function (a, b) {
    window._gaq = window._gaq || [];
    var c = !1;
    return b.trackPage = function (a, d) {
        if (!c) {
            c = !0;
            var e = document.createElement("script");
            e.type = "text/javascript", e.async = !0, e.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
            var f = document.getElementsByTagName("script")[0];
            f.parentNode.insertBefore(e, f)
        }
        d = b.extend({
            status_code: 200
        }, d), window._gaq.push(["_setAccount", a]), d.domain && window._gaq.push(["_setDomainName", d.domain]), window._gaq.push(["_trackPageview"]), window._gaq.push(["_trackPageLoadTime"]), d.status_code != 200 && window._gaq.push(["_trackEvent", "Errors", d.status_code, "page: " + document.location.pathname + document.location.search + " ref: " + document.referrer, d.error_id])
    }, b.setTrackingVar = function () {
        var a = Array.prototype.slice.call(arguments, 0);
        a.unshift("_setCustomVar"), window._gaq.push.apply(window._gaq, a)
    }, b.trackEvent = function (a, b, c, d) {
        window._gaq.push(["_trackEvent", a, b, c, d])
    }, b.trackPageview = function (a) {
        window._gaq.push(["_trackPageview", a])
    }, a && a.googleAnalyticsAccount && b.trackPage(a.googleAnalyticsAccount, {
        status_code: a.http_status,
        error_id: a.error_id,
        domainName: document.location.hostname
    }), {
        trackPage: b.trackPage,
        setTrackingVar: b.setTrackingVar,
        trackEvent: b.trackEvent,
        trackPageView: b.trackPageView
    }
}), define("vendor/swfobject/swfobject", [], function () {
    function z() {
        if (t) return;
        try {
            var a = i.getElementsByTagName("body")[0].appendChild(P("span"));
            a.parentNode.removeChild(a)
        } catch (b) {
            return
        }
        t = !0;
        var c = l.length;
        for (var d = 0; d < c; d++) l[d]()
    }
    function A(a) {
        t ? a() : l[l.length] = a
    }
    function B(b) {
        if (typeof h.addEventListener != a) h.addEventListener("load", b, !1);
        else if (typeof i.addEventListener != a) i.addEventListener("load", b, !1);
        else if (typeof h.attachEvent != a) Q(h, "onload", b);
        else if (typeof h.onload == "function") {
            var c = h.onload;
            h.onload = function () {
                c(), b()
            }
        } else h.onload = b
    }
    function C() {
        k ? D() : E()
    }
    function D() {
        if (y) {
            storedVersion = localStorage.getItem("flashversion");
            if (storedVersion) {
                ua.pv = JSON.parse(storedVersion), E();
                return
            }
        }
        var c = i.getElementsByTagName("body")[0],
            d = P(b);
        d.setAttribute("type", e);
        var f = c.appendChild(d);
        if (f) {
            var g = 0;
            (function () {
                if (typeof f.GetVariable != a) {
                    var b = f.GetVariable("$version");
                    b && (b = b.split(" ")[1].split(","), ua.pv = [parseInt(b[0], 10), parseInt(b[1], 10), parseInt(b[2], 10)], y && localStorage.setItem("flashversion", JSON.stringify(ua.pv)))
                } else if (g < 10) {
                    g++, setTimeout(arguments.callee, 10);
                    return
                }
                c.removeChild(d), f = null, E()
            })()
        } else E()
    }
    function E() {
        var b = m.length;
        if (b > 0) for (var c = 0; c < b; c++) {
            var d = m[c].id,
                e = m[c].callbackFn,
                f = {
                    success: !1,
                    id: d
                };
            if (ua.pv[0] > 0) {
                var g = O(d);
                if (g) if (R(m[c].swfVersion) && !(ua.wk && ua.wk < 312)) T(d, !0), e && (f.success = !0, f.ref = F(d), e(f));
                else if (m[c].expressInstall && G()) {
                    var h = {};
                    h.data = m[c].expressInstall, h.width = g.getAttribute("width") || "0", h.height = g.getAttribute("height") || "0", g.getAttribute("class") && (h.styleclass = g.getAttribute("class")), g.getAttribute("align") && (h.align = g.getAttribute("align"));
                    var i = {},
                        j = g.getElementsByTagName("param"),
                        k = j.length;
                    for (var l = 0; l < k; l++) j[l].getAttribute("name").toLowerCase() != "movie" && (i[j[l].getAttribute("name")] = j[l].getAttribute("value"));
                    H(h, i, d, e)
                } else I(g), e && e(f)
            } else {
                T(d, !0);
                if (e) {
                    var n = F(d);
                    n && typeof n.SetVariable != a && (f.success = !0, f.ref = n), e(f)
                }
            }
        }
    }
    function F(c) {
        var d = null,
            e = O(c);
        if (e && e.nodeName == "OBJECT") if (typeof e.SetVariable != a) d = e;
        else {
            var f = e.getElementsByTagName(b)[0];
            f && (d = f)
        }
        return d
    }
    function G() {
        return !u && R("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312)
    }
    function H(b, c, d, e) {
        u = !0, r = e || null, s = {
            success: !1,
            id: d
        };
        var g = O(d);
        if (g) {
            g.nodeName == "OBJECT" ? (p = J(g), q = null) : (p = g, q = d), b.id = f;
            if (typeof b.width == a || !/%$/.test(b.width) && parseInt(b.width, 10) < 310) b.width = "310";
            if (typeof b.height == a || !/%$/.test(b.height) && parseInt(b.height, 10) < 137) b.height = "137";
            i.title = i.title.slice(0, 47) + " - Flash Player Installation";
            var j = ua.ie && ua.win ? "ActiveX" : "PlugIn",
                k = "MMredirectURL=" + h.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + j + "&MMdoctitle=" + i.title;
            typeof c.flashvars != a ? c.flashvars += "&" + k : c.flashvars = k;
            if (ua.ie && ua.win && g.readyState != 4) {
                var l = P("div");
                d += "SWFObjectNew", l.setAttribute("id", d), g.parentNode.insertBefore(l, g), g.style.display = "none", function () {
                    g.readyState == 4 ? g.parentNode.removeChild(g) : setTimeout(arguments.callee, 10)
                }()
            }
            K(b, c, d)
        }
    }
    function I(a) {
        if (ua.ie && ua.win && a.readyState != 4) {
            var b = P("div");
            a.parentNode.insertBefore(b, a), b.parentNode.replaceChild(J(a), b), a.style.display = "none", function () {
                a.readyState == 4 ? a.parentNode.removeChild(a) : setTimeout(arguments.callee, 10)
            }()
        } else a.parentNode.replaceChild(J(a), a)
    }
    function J(a) {
        var c = P("div");
        if (ua.win && ua.ie) c.innerHTML = a.innerHTML;
        else {
            var d = a.getElementsByTagName(b)[0];
            if (d) {
                var e = d.childNodes;
                if (e) {
                    var f = e.length;
                    for (var g = 0; g < f; g++)(e[g].nodeType != 1 || e[g].nodeName != "PARAM") && e[g].nodeType != 8 && c.appendChild(e[g].cloneNode(!0))
                }
            }
        }
        return c
    }
    function K(c, d, f) {
        var g, h = O(f);
        if (ua.wk && ua.wk < 312) return g;
        if (h) {
            typeof c.id == a && (c.id = f);
            if (ua.ie && ua.win) {
                var i = "";
                for (var j in c) c[j] != Object.prototype[j] && (j.toLowerCase() == "data" ? d.movie = c[j] : j.toLowerCase() == "styleclass" ? i += ' class="' + c[j] + '"' : j.toLowerCase() != "classid" && (i += " " + j + '="' + c[j] + '"'));
                var k = "";
                for (var l in d) d[l] != Object.prototype[l] && (k += '<param name="' + l + '" value="' + d[l] + '" />');
                h.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + i + ">" + k + "</object>", n[n.length] = c.id, g = O(c.id)
            } else {
                var m = P(b);
                m.setAttribute("type", e);
                for (var o in c) c[o] != Object.prototype[o] && (o.toLowerCase() == "styleclass" ? m.setAttribute("class", c[o]) : o.toLowerCase() != "classid" && m.setAttribute(o, c[o]));
                for (var p in d) d[p] != Object.prototype[p] && p.toLowerCase() != "movie" && L(m, p, d[p]);
                h.parentNode.replaceChild(m, h), g = m
            }
        }
        return g
    }
    function L(a, b, c) {
        var d = P("param");
        d.setAttribute("name", b), d.setAttribute("value", c), a.appendChild(d)
    }
    function M(a) {
        var b = O(a);
        b && b.nodeName == "OBJECT" && (ua.ie && ua.win ? (b.style.display = "none", function () {
            b.readyState == 4 ? N(a) : setTimeout(arguments.callee, 10)
        }()) : b.parentNode.removeChild(b))
    }
    function N(a) {
        var b = O(a);
        if (b) {
            for (var c in b) typeof b[c] == "function" && (b[c] = null);
            b.parentNode.removeChild(b)
        }
    }
    function O(a) {
        var b = null;
        try {
            b = i.getElementById(a)
        } catch (c) {}
        return b
    }
    function P(a) {
        return i.createElement(a)
    }
    function Q(a, b, c) {
        a.attachEvent(b, c), o[o.length] = [a, b, c]
    }
    function R(a) {
        var b = ua.pv,
            c = a.split(".");
        return c[0] = parseInt(c[0], 10), c[1] = parseInt(c[1], 10) || 0, c[2] = parseInt(c[2], 10) || 0, b[0] > c[0] || b[0] == c[0] && b[1] > c[1] || b[0] == c[0] && b[1] == c[1] && b[2] >= c[2] ? !0 : !1
    }
    function S(c, d, e, f) {
        if (ua.ie && ua.mac) return;
        var g = i.getElementsByTagName("head")[0];
        if (!g) return;
        var h = e && typeof e == "string" ? e : "screen";
        f && (v = null, w = null);
        if (!v || w != h) {
            var j = P("style");
            j.setAttribute("type", "text/css"), j.setAttribute("media", h), v = g.appendChild(j), ua.ie && ua.win && typeof i.styleSheets != a && i.styleSheets.length > 0 && (v = i.styleSheets[i.styleSheets.length - 1]), w = h
        }
        ua.ie && ua.win ? v && typeof v.addRule == b && v.addRule(c, d) : v && typeof i.createTextNode != a && v.appendChild(i.createTextNode(c + " {" + d + "}"))
    }
    function T(a, b) {
        if (!x) return;
        var c = b ? "visible" : "hidden";
        t && O(a) ? O(a).style.visibility = c : S("#" + a, "visibility:" + c)
    }
    function U(b) {
        var c = /[\\\"<>\.;]/,
            d = c.exec(b) != null;
        return d && typeof encodeURIComponent != a ? encodeURIComponent(b) : b
    }
    var a = "undefined",
        b = "object",
        c = "Shockwave Flash",
        d = "ShockwaveFlash.ShockwaveFlash",
        e = "application/x-shockwave-flash",
        f = "SWFObjectExprInst",
        g = "onreadystatechange",
        h = window,
        i = document,
        j = navigator,
        k = !1,
        l = [C],
        m = [],
        n = [],
        o = [],
        p, q, r, s, t = !1,
        u = !1,
        v, w, x = !0,
        y = !! window.localStorage;
    ua = function () {
        var f = typeof i.getElementById != a && typeof i.getElementsByTagName != a && typeof i.createElement != a,
            g = j.userAgent.toLowerCase(),
            l = j.platform.toLowerCase(),
            m = l ? /win/.test(l) : /win/.test(g),
            n = l ? /mac/.test(l) : /mac/.test(g),
            o = /webkit/.test(g) ? parseFloat(g.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : !1,
            p = !1,
            q = [0, 0, 0],
            r = null;
        if (typeof j.plugins != a && typeof j.plugins[c] == b) r = j.plugins[c].description, r && (typeof j.mimeTypes == a || !j.mimeTypes[e] || !! j.mimeTypes[e].enabledPlugin) && (k = !0, p = !1, r = r.replace(/^.*\s+(\S+\s+\S+$)/, "$1"), q[0] = parseInt(r.replace(/^(.*)\..*$/, "$1"), 10), q[1] = parseInt(r.replace(/^.*\.(.*)\s.*$/, "$1"), 10), q[2] = /[a-zA-Z]/.test(r) ? parseInt(r.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0);
        else if (typeof h.ActiveXObject != a) try {
            var s = new ActiveXObject(d);
            s && (r = s.GetVariable("$version"), r && (p = !0, r = r.split(" ")[1].split(","), q = [parseInt(r[0], 10), parseInt(r[1], 10), parseInt(r[2], 10)]))
        } catch (t) {}
        return {
            w3: f,
            pv: q,
            wk: o,
            ie: p,
            win: m,
            mac: n
        }
    }(), onDomLoad = function () {
        if (!ua.w3) return;
        (typeof i.readyState != a && i.readyState == "complete" || typeof i.readyState == a && (i.getElementsByTagName("body")[0] || i.body)) && z(), t || (typeof i.addEventListener != a && i.addEventListener("DOMContentLoaded", z, !1), ua.ie && ua.win && (i.attachEvent(g, function () {
            i.readyState == "complete" && (i.detachEvent(g, arguments.callee), z())
        }), h == top &&
        function () {
            if (t) return;
            try {
                i.documentElement.doScroll("left")
            } catch (a) {
                setTimeout(arguments.callee, 0);
                return
            }
            z()
        }()), ua.wk &&
        function () {
            if (t) return;
            if (!/loaded|complete/.test(i.readyState)) {
                setTimeout(arguments.callee, 0);
                return
            }
            z()
        }(), B(z))
    }();
    var V = function () {
            ua.ie && ua.win && window.attachEvent("onunload", function () {
                var a = o.length;
                for (var b = 0; b < a; b++) o[b][0].detachEvent(o[b][1], o[b][2]);
                var c = n.length;
                for (var d = 0; d < c; d++) M(n[d]);
                for (var e in ua) ua[e] = null;
                ua = null;
                for (var f in W) W[f] = null;
                W = null
            })
        }(),
        W = {
            registerObject: function (a, b, c, d) {
                if (ua.w3 && a && b) {
                    var e = {};
                    e.id = a, e.swfVersion = b, e.expressInstall = c, e.callbackFn = d, m[m.length] = e, T(a, !1)
                } else d && d({
                    success: !1,
                    id: a
                })
            },
            getObjectById: function (a) {
                if (ua.w3) return F(a)
            },
            embedSWF: function (c, d, e, f, g, h, i, j, k, l) {
                var m = {
                    success: !1,
                    id: d
                };
                ua.w3 && !(ua.wk && ua.wk < 312) && c && d && e && f && g ? (T(d, !1), A(function () {
                    e += "", f += "";
                    var n = {};
                    if (k && typeof k === b) for (var o in k) n[o] = k[o];
                    n.data = c, n.width = e, n.height = f;
                    var p = {};
                    if (j && typeof j === b) for (var q in j) p[q] = j[q];
                    if (i && typeof i === b) for (var r in i) typeof p.flashvars != a ? p.flashvars += "&" + r + "=" + i[r] : p.flashvars = r + "=" + i[r];
                    if (R(g)) {
                        var s = K(n, p, d);
                        n.id == d && T(d, !0), m.success = !0, m.ref = s
                    } else {
                        if (h && G()) {
                            n.data = h, H(n, p, d, l);
                            return
                        }
                        T(d, !0)
                    }
                    l && l(m)
                })) : l && l(m)
            },
            switchOffAutoHideShow: function () {
                x = !1
            },
            ua: ua,
            getFlashPlayerVersion: function () {
                return {
                    major: ua.pv[0],
                    minor: ua.pv[1],
                    release: ua.pv[2]
                }
            },
            hasFlashPlayerVersion: R,
            createSWF: function (a, b, c) {
                return ua.w3 ? K(a, b, c) : undefined
            },
            showExpressInstall: function (a, b, c, d) {
                ua.w3 && G() && H(a, b, c, d)
            },
            removeSWF: function (a) {
                ua.w3 && M(a)
            },
            createCSS: function (a, b, c, d) {
                ua.w3 && S(a, b, c, d)
            },
            addDomLoadEvent: A,
            addLoadEvent: B,
            getQueryParamValue: function (a) {
                var b = i.location.search || i.location.hash;
                if (b) {
                    /\?/.test(b) && (b = b.split("?")[1]);
                    if (a == null) return U(b);
                    var c = b.split("&");
                    for (var d = 0; d < c.length; d++) if (c[d].substring(0, c[d].indexOf("=")) == a) return U(c[d].substring(c[d].indexOf("=") + 1))
                }
                return ""
            },
            expressInstallCallback: function () {
                if (u) {
                    var a = O(f);
                    a && p && (a.parentNode.replaceChild(p, a), q && (T(q, !0), ua.ie && ua.win && (p.style.display = "block")), r && r(s)), u = !1
                }
            }
        };
    return window.swfobject = W, W
}), function () {
    define("compiled/xhr/FakeXHR", ["jquery"], function (a) {
        var b;
        return b = function () {
            function b() {
                this.readyState = 0, this.timeout = 0, this.withCredentials = !1
            }
            return b.prototype.setResponse = function (b) {
                var c;
                this.readyState = 4, this.responseText = b;
                try {
                    this.response = a.parseJSON(b)
                } catch (d) {
                    c = d, this.status = 500, this.statusText = "500 Internal Server Error";
                    return
                }
                return this.response.errors ? (this.status = 400, this.statusText = "400 Bad Request") : (this.status = 200, this.statusText = "200 OK"), this.responseType = "json"
            }, b.prototype.abort = function () {}, b.prototype.getAllResponseHeaders = function () {
                return this.responseText ? "" : null
            }, b.prototype.getResponseHeader = function () {}, b.prototype.open = function () {}, b.prototype.overrideMimeType = function () {}, b.prototype.send = function () {}, b.prototype.setRequestHeader = function () {}, b
        }()
    })
}.call(this), define("vendor/jquery.cookie", ["jquery"], function (a) {
    jQuery.cookie = function (a, b, c) {
        if (typeof b == "undefined") {
            var i = null;
            if (document.cookie && document.cookie != "") {
                var j = document.cookie.split(";");
                for (var k = 0; k < j.length; k++) {
                    var l = jQuery.trim(j[k]);
                    if (l.substring(0, a.length + 1) == a + "=") {
                        i = decodeURIComponent(l.substring(a.length + 1));
                        break
                    }
                }
            }
            return i
        }
        c = c || {}, b === null && (b = "", c.expires = -1);
        var d = "";
        if (c.expires && (typeof c.expires == "number" || c.expires.toUTCString)) {
            var e;
            typeof c.expires == "number" ? (e = new Date, e.setTime(e.getTime() + c.expires * 24 * 60 * 60 * 1e3)) : e = c.expires, d = "; expires=" + e.toUTCString()
        }
        var f = c.path ? "; path=" + c.path : "",
            g = c.domain ? "; domain=" + c.domain : "",
            h = c.secure ? "; secure" : "";
        document.cookie = [a, "=", encodeURIComponent(b), d, f, g, h].join("")
    }
}), define("translations/shared.flash_notices", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                shared: {
                    flash_notices: {
                        close: "إغلاق"
                    }
                }
            },
            de: {
                shared: {
                    flash_notices: {
                        close: "Schließen"
                    }
                }
            },
            "el-gr": {},
            "en-AU": {
                shared: {
                    flash_notices: {
                        close: "Close"
                    }
                }
            },
            "en-GB": {
                shared: {
                    flash_notices: {
                        close: "Close"
                    }
                }
            },
            es: {
                shared: {
                    flash_notices: {
                        close: "Cerrar"
                    }
                }
            },
            fr: {
                shared: {
                    flash_notices: {
                        close: "Fermer"
                    }
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                shared: {
                    flash_notices: {
                        close: "閉じる"
                    }
                }
            },
            ko: {
                shared: {
                    flash_notices: {
                        close: "닫기"
                    }
                }
            },
            "ko-kr": {},
            nl: {
                shared: {
                    flash_notices: {
                        close: "Sluiten"
                    }
                }
            },
            pl: {
                shared: {
                    flash_notices: {
                        close: "Zamknij"
                    }
                }
            },
            pt: {
                shared: {
                    flash_notices: {
                        close: "Fechar"
                    }
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                shared: {
                    flash_notices: {
                        close: "Закрыть"
                    }
                }
            },
            "tr-tr": {},
            zh: {
                shared: {
                    flash_notices: {
                        close: "关闭"
                    }
                }
            },
            "zh-hans": {}
        }
    })
}), define("translations/editor_accessibility", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "لون الخلفية، اضغط لأسفل للتحديد",
                        forecolor: "لون النص، اضغط لأسفل للتحديد",
                        record: "لا يمكن الوصول لهذه الميزة بالنسبة لأجهزة قراءة الشاشة."
                    },
                    titles: {
                        font_size: "حجم الخط، اضغط لأسفل للتحديد",
                        formatting: "التنسيق، اضغط لأسفل للتحديد",
                        rte_help: "منطقة نص منسق. اضغط ALT F10 لإظهار شريط الأدوات. اضغط ALT 0 لإظهار التعليمات."
                    }
                }
            },
            de: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Hintergrundfarbe, zum Auswählen Nach-Unten-Taste drücken",
                        forecolor: "Textfarbe, zum Auswahlen Nach-Unten-Taste drücken",
                        record: "Auf diese Funktion haben Sprachausgabeprogramme keinen Zugriff."
                    },
                    titles: {
                        font_size: "Schriftgröße, zum Auswählen Nach-Unten-Taste drücken",
                        formatting: "Formatierung, zum Auswählen Nach-Unten-Taste drücken",
                        rte_help: "Rich-Text-Bereich. Drücken Sie ALT+F10, um die Symbolleiste anzuzeigen. Drücken Sie ALT+0, um die Hilfe anzuzeigen."
                    }
                }
            },
            "el-gr": {},
            "en-AU": {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Background Colour, press down to select",
                        forecolor: "Text Colour, press down to select",
                        record: "This feature is inaccessible for screen readers."
                    },
                    titles: {
                        font_size: "Font Size, press down to select",
                        formatting: "Formatting, press down to select",
                        rte_help: "Rich Text Area. Press ALT F10 for toolbar. Press ALT 0 for help."
                    }
                }
            },
            "en-GB": {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Background colour. Press down to select",
                        forecolor: "Text colour. Press down to select",
                        record: "This feature is inaccessible for screen readers."
                    },
                    titles: {
                        font_size: "Font size. Press down to select",
                        formatting: "Formatting. Press down to select",
                        rte_help: "Rich text area. Press ALT F10 for toolbar. Press ALT 0 for help."
                    }
                }
            },
            es: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Color de fondo, pulse abajo para seleccionar",
                        forecolor: "Color de texto, pulse abajo para seleccionar",
                        record: "Los lectores de pantalla no pueden acceder a esta función."
                    },
                    titles: {
                        font_size: "Tamaño del texto, pulse abajo para seleccionar",
                        formatting: "Formato, pulse abajo para seleccionar",
                        rte_help: "Area de texto enriquecido. Pulse ALT F10 para mostrar la barra de herramientas. Presione ALT 0 para obtener ayuda. "
                    }
                }
            },
            fr: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Couleur de fond. Appuyez pour sélectionner.",
                        forecolor: "Couleur du texte. Appuyez pour sélectionner.",
                        record: "Cette fonction n’est pas accessible aux lecteurs d’écrans."
                    },
                    titles: {
                        font_size: "Taille du texte. Appuyez pour sélectionner.",
                        formatting: "Mise en forme. Appuyez pour sélectionner.",
                        rte_help: "Zone de texte enrichi. Appuyez sur Alt+F10 pour afficher la barre d’outils et sur Alt+0 pour accéder à l’Aide."
                    }
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "背景色、押して選択",
                        forecolor: "テキスト色、押して選択",
                        record: "この機能はスクリーン リーダーからアクセスできません。"
                    },
                    titles: {
                        font_size: "フォント サイズ、押して選択",
                        formatting: "書式設定、押して選択",
                        rte_help: "リッチ テキスト領域。ツールバーの場合は ALT + F10 を押してください。ヘルプの場合は ALT + 0 を押してください。"
                    }
                }
            },
            ko: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "배경색, 선택하려면 누름",
                        forecolor: "텍스트 색, 선택하려면 누름",
                        record: "이 기능은 스크린 리더에서 액세스할 수 없습니다."
                    },
                    titles: {
                        font_size: "글자 크기, 선택하려면 누름",
                        formatting: "서식, 선택하려면 누름",
                        rte_help: "서식있는 텍스트 영역입니다. 도구 모음은 ALT F10을 누르십시오. 도움말은 ALT 0을 누르십시오."
                    }
                }
            },
            "ko-kr": {},
            nl: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Achtergrondkleur, druk omlaag om een optie te selecteren",
                        forecolor: "Tekstkleur, druk omlaag om een optie selecteren",
                        record: "Deze functie is niet toegankelijk voor schermlezers."
                    },
                    titles: {
                        font_size: "Tekengrootte, druk omlaag om een optie te selecteren",
                        formatting: "Opmaak, druk omlaag om een optie te selecteren",
                        rte_help: "RTF-gebied. Druk op ALT F10 voor de werkbalk. Druk op ALT 0 voor hulp."
                    }
                }
            },
            pl: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Kolor tła; naciskaj do dołu, aby wybrać",
                        forecolor: "Kolor tekstu; naciskaj do dołu, aby wybrać",
                        record: "Ta funkcja jest niedostępna dla programu do odczytywania zawartości ekranu."
                    },
                    titles: {
                        font_size: "Rozmiar czcionki; naciskaj do dołu, aby wybrać",
                        formatting: "Formatowanie; naciskaj do dołu, aby wybrać",
                        rte_help: "Wzbogacony obszar teksu. Naciśnij ALT F10, aby przejść do paska narzędzi. Naciśnij ALT 0, aby przejść do pomocy."
                    }
                }
            },
            pt: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Cor de fundo, premir para baixo para selecionar",
                        forecolor: "Cor do texto, premir para baixo para selecionar",
                        record: "Esta funcionalidade não está acessível para leitores de ecrã."
                    },
                    titles: {
                        font_size: "Tamanho da letra, premir para baixo para selecionar",
                        formatting: "Formatação, premir para baixo para selecionar",
                        rte_help: "Área de Rich Text. Premir ALT F10 para a barra de ferramentas. Premir ALT 0 para ajuda."
                    }
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "Цвет фона, нажмите стрелку вниз, чтобы выбрать",
                        forecolor: "Цвет текста, нажмите стрелку вниз, чтобы выбрать",
                        record: "Данная функция недоступна для чтения с экрана."
                    },
                    titles: {
                        font_size: "Размер шрифта, нажмите стрелку вниз, чтобы выбрать",
                        formatting: "Форматирование, нажмите стрелку вниз, чтобы выбрать",
                        rte_help: "Отформатированный текст. Нажмите ALT F10 для вызова панели инструментов. Нажмите ALT 0 для вызова справки."
                    }
                }
            },
            "tr-tr": {},
            zh: {
                editor_accessibility: {
                    accessibles: {
                        background_color: "背景颜色，按下即可选择",
                        forecolor: "文本颜色，按下即可选择",
                        record: "此功能对于屏幕阅读器是不可访问的。"
                    },
                    titles: {
                        font_size: "字体大小，按下即可选择",
                        formatting: "格式，按下即可选择",
                        rte_help: "富文本区域，按 ALT F10 显示工具栏。按 ALT 0 显示帮助。"
                    }
                }
            },
            "zh-hans": {}
        }
    })
}), function () {
    define("compiled/editor/editorAccessibility", ["i18n!editor_accessibility", "jquery"], function (a, b) {
        var c;
        return c = function () {
            function c(a) {
                this.id_prepend = a.editorId, this.$el = b("#" + a.editorContainer)
            }
            return c.prototype.accessiblize = function () {
                return this._cacheElements(), this._addTitles(), this._addLabels(), this._highlightSelectedColor()
            }, c.prototype._highlightSelectedColor = function () {
                return b("body").on("click", ".mceColorSplitMenu td", function () {
                    return b(this).parentsUntil(".mceColorSplitMenu").find(".selectedColor").removeClass("selectedColor"), b(this).addClass("selectedColor")
                })
            }, c.prototype._cacheElements = function () {
                return this.$iframe = this.$el.find(".mceIframeContainer iframe")
            }, c.prototype._addLabels = function () {
                return this.$el.find("#" + this.id_prepend + "_fontsizeselect_voiceDesc").text(a.t("titles.font_size", "Font Size, press down to select")), this.$el.find("#" + this.id_prepend + "_formatselect_voiceDesc").text(a.t("titles.formatting", "Formatting, press down to select")), this.$el.find("#" + this.id_prepend + "_forecolor_voice").text(a.t("accessibles.forecolor", "Text Color, press down to select")), this.$el.find("#" + this.id_prepend + "_backcolor_voice").text(a.t("accessibles.background_color", "Background Color, press down to select")), this.$el.find("#" + this.id_prepend + "_instructure_record").attr("aria-disabled", "true"), this.$el.find("#" + this.id_prepend + "_instructure_record").removeAttr("role"), this.$el.find("#" + this.id_prepend + "_instructure_record_voice").append("<br/>").append(a.t("accessibles.record", "This feature is inaccessible for screen readers.")), this.$el.find("#" + this.id_prepend + "_instructure_record img").attr("alt", this.$el.find("#" + this.id_prepend + "_instructure_record img").attr("alt") + ", " + a.t("accessibles.record", "This feature is inaccessible for screen readers."))
            }, c.prototype._addTitles = function () {
                return this.$iframe.attr("title", a.t("titles.rte_help", "Rich Text Area. Press ALT F10 for toolbar. Press ALT 0 for help."))
            }, c
        }()
    })
}.call(this), define("translations/scribd", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                scribd: {
                    upgrade_flash: "مرحبًا، إصدار Adobe Flash Player الذي لديك قديم. لاستخدام iPaper (وكثير من المواد الأخرى على الويب) تحتاج إلى %{link_tag}get the latest Flash player%{end_link}."
                }
            },
            de: {
                scribd: {
                    upgrade_flash: "Hallo, Sie verfügen über eine veraltete Version von Adobe Flash Player. Um iPaper (und viele andere Dinge im Netz) zu verwenden, benötigen Sie %{link_tag}den aktuellen Flash player%{end_link}."
                }
            },
            "el-gr": {},
            "en-AU": {
                scribd: {
                    upgrade_flash: "Hello, you have an old version of Adobe Flash Player. To use iPaper (and lots of other stuff on the web) you need to %{link_tag}get the latest Flash player%{end_link}."
                }
            },
            "en-GB": {
                scribd: {
                    upgrade_flash: "Hello, you have an old version of Adobe Flash Player. To use iPaper (and lots of other stuff on the web) you need to %{link_tag}get the latest Flash player%{end_link}."
                }
            },
            es: {
                scribd: {
                    upgrade_flash: "Hola, tiene una version vieja de Adobe Flash Player. Para usar iPaper (y muchas otras cosas en el internet) necesita %{link_tag} para obtener la versión más nueva de Flash player %{end_link}."
                }
            },
            fr: {
                scribd: {
                    upgrade_flash: "Bonjour, votre version d’Adobe Flash Player est obsolète. Pour utiliser iPaper (et beaucoup d’autres outils du Web), vous devez %{link_tag}vous procurer le dernier lecteur Flash%{end_link}."
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                scribd: {
                    upgrade_flash: "古いバージョンの Adobe Flash Player をお使いです。iPaper (および Web 上のさまざまな機能) を使用するには、%{link_tag}最新の Flash Player を入手する%{end_link}必要があります。"
                }
            },
            ko: {
                scribd: {
                    upgrade_flash: "Adobe Flash Player가 오래된 버전입니다. iPaper (및 웹상에 있는 여러가지)를 사용하려면 %{link_tag}최신 Flash 플레이어%{end_link}를 받으십시오."
                }
            },
            "ko-kr": {},
            nl: {
                scribd: {
                    upgrade_flash: "U gebruikt een oude versie van Adobe Flash Player. Om iPaper (en veel andere hulpmiddelen) te gebruiken, moet u de %{link_tag}laatste Flash Player downloaden%{end_link}."
                }
            },
            pl: {
                scribd: {
                    upgrade_flash: "Halo, posiadasz starą wersję Adobe Flash Player. Aby używać iPaper (i masę innych rzeczy w sieci) musisz %{link_tag}pobrać najnowszy Flash player%{end_link}."
                }
            },
            pt: {
                scribd: {
                    upgrade_flash: "Tem uma versão antiga do Adobe Flash Player. Para utilizar o iPaper (e muitos outros recursos na Internet), é necessário %{link_tag}obter o Flash Player mais recente%{end_link}."
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                scribd: {
                    upgrade_flash: "Здравствуйте, у вас установлена ​​старая версия Adobe Flash Player. Чтобы использовать iPaper (и многим другим в Интернете), вам необходимо %{link_tag}, чтобы установить последнюю версию Flash player%{end_link}."
                }
            },
            "tr-tr": {},
            zh: {
                scribd: {
                    upgrade_flash: "您好，您当前使用的是 Adobe Flash Player 的旧版本。要使用 iPaper（和网络上的众多其它内容），您需要%{link_tag}获取最新的 Flash player%{end_link}。"
                }
            },
            "zh-hans": {}
        }
    })
}), define("vendor/scribd.view", ["INST", "i18n!scribd"], function (a, b) {
    if (typeof c == "undefined") {
        var c = new Object;
        c.Document = function () {
            this.__params = [], this.__callQueue = [], this.__listenerLookup = {};
            if (arguments.length == 2) return this.document_id = arguments[0], this.access_key = arguments[1], this;
            if (c.Document.caller != c.Document.getDoc && c.Document.caller != c.Document.getDocFromUrl && c.Document.caller != c.Document.getDocFromUrlForExtension && c.Document.caller != undefined) throw new Error("There is no public constructor for scribd.Document.")
        }, c.Document.getDoc = function (a, b) {
            return scribd_doc = new c.Document, scribd_doc.document_id = a, scribd_doc.access_key = b, scribd_doc
        }, c.Document.getDocFromUrl = function (a, b) {
            return scribd_doc = new c.Document, scribd_doc.url = a, scribd_doc.publisher_id = b, scribd_doc
        }, c.Document.getDocFromUrlForExtension = function (a, b) {
            return scribd_doc = new c.Document, scribd_doc.url = a, scribd_doc.extension_id = b, scribd_doc.addParam("should_redirect", !0), scribd_doc
        }, c.Document.prototype = {
            __handleEvent: function (a) {
                var b = this.__listenerLookup[a] || [];
                for (var c = 0; c < b.length; c++) b[c]()
            },
            __addRoutedListener: function (a, b) {
                if (this.__listenerExists(a, b)) return;
                this.__listenerLookup[a] ? this.__listenerLookup[a].push(b) : this.__listenerLookup[a] = new Array(b)
            },
            __removeRoutedListener: function (a, b) {
                var c = this.__listenerLookup[a];
                for (var d = 0; d < c.length; d++) c[d] == b && c.splice(d, 1)
            },
            __listenerExists: function (a, b) {
                var c = this.__listenerLookup[a] || [];
                for (var d = 0; d < c.length; d++) if (c[d] == b) return !0;
                return !1
            },
            addEventListener: function (a, b, c) {
                this.api ? window.addEventListener ? this.api.parentNode.addEventListener(a, b, !1) : this.__addRoutedListener(a, b) : this.__callQueue.push(["addEventListener", a, b, !1])
            },
            removeEventListener: function (a, b) {
                this.api ? window.addEventListener ? this.api.removeEventListener(a, b, !1) : this.__removeRoutedListener(a, b) : this.__callQueue.push(["removeEventListener", a, b])
            },
            getElement: function () {
                return document.getElementsByName(this.__embedName)[0]
            },
            addParam: function (a, b) {
                this.__params[a] = b
            },
            grantAccess: function (a, b, c) {
                this.__params.user_identifier = a, this.__params.secure_session_id = b, this.__params.signature = c
            },
            write: function (a) {
                var c = document.getElementById(a);
                quickswitch = this.__params["quickswitch"] == 1;
                if (quickswitch) {
                    var d = document.createElement("div");
                    d.style.width = "100%", d.style.height = "100%", document.body.appendChild(d)
                }
                var e = c.offsetWidth,
                    f = "",
                    g = "";
                this.__params.width && this.__params["width"] != "parent" && (e = this.__params.width), this.__params.mode && (f = this.__params.mode, g += "&viewMode=" + escape(this.__params.mode));
                if (this.__params["height"] != "parent") {
                    var h = Math.round(e * 11 / 8.5);
                    f == "slideshow" && (h = 35 + Math.round(e * 3 / 4));
                    var j = window.innerHeight != null ? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null ? document.body.clientHeight : 0;
                    j -= 25, h < 200 && (h = 200), h > j && (h = j);
                    var k = h + "px"
                } else var k = "100%";
                var m = "100%",
                    n = a + "_embed" + Math.round(Math.random() * 9e9);
                this.__embedName = n;
                var o = "ScribdViewer";
                this.__params["auto_size"] != 1 && (g += "&auto_size=false"), this.__params.height && this.__params["height"] != "parent" && (k = this.__params.height + "px"), this.__params.width && this.__params["width"] != "parent" && (m = this.__params.width + "px"), this.__params.swf_name && (o = this.__params.swf_name), this.__params.disable_related_docs && (g += "&disable_related_docs=" + this.__params.disable_related_docs), this.__params.page && (g += "&page=" + this.__params.page), this.__params.extension && (g += "&extension=" + this.__params.extension), this.__params.title && (g += "&title=" + escape(this.__params.title)), this.__params.my_user_id && (g += "&my_user_id=" + this.__params.my_user_id), this.__params.api_url && (g += "&api_url=" + this.__params.api_url), this.__params.doctype && (g += "&doctype=" + this.__params.doctype), this.__params.current_user_id && (g += "&current_user_id=" + this.__params.current_user_id), this.__params.search_query && (g += "&search_query=" + escape(this.__params.search_query)), this.__params.search_keywords && (g += "&search_keywords=" + escape(this.__params.search_keywords)), this.__params["transferCookie"] == 1 && (g += "&cookie=" + escape(document.cookie)), this.__params.should_redirect && (g += "&should_redirect=" + this.__params.should_redirect), this.__params.secret_password && (g += "&secret_password=" + this.__params.secret_password), this.__params["public"] == 1 ? g += "&privacy=0" : g += "&privacy=1", this.__params.user_identifier && (g += "&user_identifier=" + escape(this.__params.user_identifier)), this.__params.secure_session_id && (g += "&secure_session_id=" + escape(this.__params.secure_session_id)), this.__params.signature && (g += "&signature=" + this.__params.signature), this.__params.docinfo && (g += "&docinfo=" + encodeURIComponent(this.__params.docinfo)), this.__params.useIntegratedUi && (g += "&useIntegratedUi=" + this.__params.useIntegratedUi), this.document_id && (g += "&document_id=" + this.document_id), this.access_key && (g += "&access_key=" + this.access_key), this.extension_id && (g += "&extension_id=" + this.extension_id), this.url && (g += "&url=" + escape(this.url)), this.publisher_id && (g += "&publisher_id=" + escape(this.publisher_id));
                var p = "http://d1.scribdassets.com/",
                    q = "http://";
                this.__params["use_ssl"] == 1 && (p = "https://s3.amazonaws.com/documents.scribd.com/", g += "&use_ssl=true", q = "https://"), this.__params.src_path && (p = this.__params.src_path), this.__params.hide_sample_banner && (g += "&hide_sample_banner=" + this.__params.hide_sample_banner), this.__params["disable_resume_reading"] == 1 && (g += "&disable_resume_reading=true"), this.__params["hide_full_screen_button"] == 1 && (g += "&hide_full_screen_button=true"), this.__params["hide_disabled_buttons"] == 1 && (g += "&hide_disabled_buttons=true"), this.__params.full_screen_type && (g += "&full_screen_type=" + this.__params.full_screen_type), this.__params.custom_logo_image_url && (g += "&custom_logo_image_url=" + escape(this.__params.custom_logo_image_url)), this.__params.custom_logo_click_url && (g += "&custom_logo_click_url=" + escape(this.__params.custom_logo_click_url));
                var r = l("codebase", q + "download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0", "width", m, "height", k, "flashvars", g, "src", p + o, "quality", "high", "pluginspage", q + "www.macromedia.com/go/getflashplayer", "align", "middle", "play", "true", "loop", "true", "scale", "showall", "wmode", "opaque", "devicefont", "false", "id", n, "bgcolor", "#ffffff", "name", n, "menu", "true", "allowFullScreen", "true", "allowScriptAccess", "always", "movie", p + o, "salign", ""),
                    s = i(9, 0, 0);
                s || (r = '<span style="display:block;font-size:16px;width:300px;border:1px solid #dddddd;padding:3px">' + b.t("upgrade_flash", "Hello, you have an old version of Adobe Flash Player. To use iPaper (and lots of other stuff on the web) you need to %{link_tag}get the latest Flash player%{end_link}.", {
                    link_tag: '<a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">',
                    end_link: "</a>"
                }) + "  </span>");
                if (quickswitch) {
                    d.innerHTML = r;
                    if (c.hasChildNodes()) while (c.childNodes.length >= 1) c.removeChild(c.firstChild);
                    c.appendChild(d)
                } else c.innerHTML = r;
                var t = this;
                window["_scribd_event_handler_" + n] = function (a) {
                    t.__handleEvent(a)
                };
                var u = function (a) {
                        var a = a || {},
                            b = a.srcElement || document.getElementsByName(n)[0];
                        if (b.getAttribute("name") == n) {
                            t.api = b;
                            var c, d, e, f = [];
                            for (var c = 0; c < t.__callQueue.length; c++) e = t.__callQueue[c], e[0] == "addEventListener" ? (d = e.shift(), t[d].apply(t, e)) : f.push(e);
                            t.__callQueue = f
                        }
                    },
                    v = function (a) {
                        var a = a || {},
                            b = a.srcElement || document.getElementsByName(n)[0];
                        if (b.getAttribute("name") == n) {
                            t.onReady && t.onReady();
                            var c, d, e, f = [];
                            for (c = 0; c < t.__callQueue.length; c++) e = t.__callQueue.pop(), e[0] != "addEventListener" ? (d = e.shift(), typeof d != "function" && alert(typeof d), t[d].apply(t, e)) : f.push(e);
                            t.__callQueue = f
                        }
                    };
                window.addEventListener ? (window.addEventListener("iPaperReady", v, !0), window.addEventListener("setupJsApi", u, !0)) : (this.__addRoutedListener("iPaperReady", v), this.__addRoutedListener("setupJsApi", u))
            }
        };
        var d = navigator.appVersion.indexOf("MSIE") != -1 ? !0 : !1,
            e = navigator.appVersion.toLowerCase().indexOf("win") != -1 ? !0 : !1,
            f = navigator.userAgent.indexOf("Opera") != -1 ? !0 : !1;

        function g() {
            var a, b, c;
            try {
                b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"), a = b.GetVariable("$version")
            } catch (c) {}
            if (!a) try {
                b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), a = "WIN 6,0,21,0", b.AllowScriptAccess = "always", a = b.GetVariable("$version")
            } catch (c) {}
            if (!a) try {
                b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"), a = b.GetVariable("$version")
            } catch (c) {}
            if (!a) try {
                b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"), a = "WIN 3,0,18,0"
            } catch (c) {}
            if (!a) try {
                b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), a = "WIN 2,0,0,11"
            } catch (c) {
                a = -1
            }
            return a
        }
        function h() {
            var a = -1;
            if (navigator.plugins != null && navigator.plugins.length > 0) {
                if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
                    var b = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "",
                        c = navigator.plugins["Shockwave Flash" + b].description,
                        h = c.split(" "),
                        i = h[2].split("."),
                        j = i[0],
                        k = i[1],
                        l = h[3];
                    l == "" && (l = h[4]), l[0] == "d" ? l = l.substring(1) : l[0] == "r" && (l = l.substring(1), l.indexOf("d") > 0 && (l = l.substring(0, l.indexOf("d"))));
                    var a = j + "." + k + "." + l
                }
            } else navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1 ? a = 4 : navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1 ? a = 3 : navigator.userAgent.toLowerCase().indexOf("webtv") != -1 ? a = 2 : d && e && !f && (a = g());
            return a
        }
        function i(a, b, c) {
            versionStr = h();
            if (versionStr == -1) return !1;
            if (versionStr != 0) {
                d && e && !f ? (tempArray = versionStr.split(" "), tempString = tempArray[1], versionArray = tempString.split(",")) : versionArray = versionStr.split(".");
                var g = versionArray[0],
                    i = versionArray[1],
                    j = versionArray[2];
                if (g > parseFloat(a)) return !0;
                if (g == parseFloat(a)) {
                    if (i > parseFloat(b)) return !0;
                    if (i == parseFloat(b) && j >= parseFloat(c)) return !0
                }
                return !1
            }
        }
        function j(a, b) {
            return a.indexOf("?") != -1 ? a.replace(/\?/, b + "?") : a + b
        }
        function k(a, b, c) {
            var g = "";
            if (d && e && !f) {
                g += "<object ";
                for (var h in a) g += h + '="' + a[h] + '" ';
                g += ">";
                for (var h in b) g += '<param name="' + h + '" value="' + b[h] + '" /> ';
                g += "</object>"
            } else {
                g += "<embed ";
                for (var h in c) g += h + '="' + c[h] + '" ';
                g += "> </embed>"
            }
            return g
        }
        function l() {
            var a = n(arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash");
            return k(a.objAttrs, a.params, a.embedAttrs)
        }
        function m() {
            var a = n(arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000", null);
            return k(a.objAttrs, a.params, a.embedAttrs)
        }
        function n(a, b, c, d, e) {
            var f = new Object;
            f.embedAttrs = new Object, f.params = new Object, f.objAttrs = new Object;
            for (var g = 0; g < a.length; g += 2) {
                var h = a[g].toLowerCase();
                switch (h) {
                case "classid":
                    break;
                case "pluginspage":
                    f.embedAttrs[a[g]] = a[g + 1];
                    break;
                case "src":
                case "movie":
                    a[g + 1] = j(a[g + 1], b), f.embedAttrs.src = a[g + 1], f.params[c] = a[g + 1];
                    break;
                case "onafterupdate":
                case "onbeforeupdate":
                case "onblur":
                case "oncellchange":
                case "onclick":
                case "ondblclick":
                case "ondrag":
                case "ondragend":
                case "ondragenter":
                case "ondragleave":
                case "ondragover":
                case "ondrop":
                case "onfinish":
                case "onfocus":
                case "onhelp":
                case "onmousedown":
                case "onmouseup":
                case "onmouseover":
                case "onmousemove":
                case "onmouseout":
                case "onkeypress":
                case "onkeydown":
                case "onkeyup":
                case "onload":
                case "onlosecapture":
                case "onpropertychange":
                case "onreadystatechange":
                case "onrowsdelete":
                case "onrowenter":
                case "onrowexit":
                case "onrowsinserted":
                case "onstart":
                case "onscroll":
                case "onbeforeeditfocus":
                case "onactivate":
                case "onbeforedeactivate":
                case "ondeactivate":
                case "type":
                case "codebase":
                case "id":
                    f.objAttrs[a[g]] = a[g + 1];
                    break;
                case "width":
                case "height":
                case "align":
                case "vspace":
                case "hspace":
                case "class":
                case "title":
                case "accesskey":
                case "name":
                case "tabindex":
                    f.embedAttrs[a[g]] = f.objAttrs[a[g]] = a[g + 1];
                    break;
                default:
                    f.embedAttrs[a[g]] = f.params[a[g]] = a[g + 1]
                }
            }
            return f.objAttrs.classid = d, e && (f.embedAttrs.type = e), f
        }
        typeof scribd_view_callback != "undefined" && scribd_view_callback()
    }
    return c
}), function () {
    var a = {}.hasOwnProperty,
        b = function (b, c) {
            function e() {
                this.constructor = b
            }
            for (var d in c) a.call(c, d) && (b[d] = c[d]);
            return e.prototype = c.prototype, b.prototype = new e, b.__super__ = c.prototype, b
        };
    define("compiled/views/KeyboardNavDialog", ["i18n!instructure", "Backbone", "jquery", "jqueryui/dialog"], function (a, c, d) {
        var e, f, g;
        return f = c.View, e = function (c) {
            function e() {
                return g = e.__super__.constructor.apply(this, arguments), g
            }
            return b(e, c), e.prototype.el = "#keyboard_navigation", e.prototype.initialize = function () {
                return e.__super__.initialize.apply(this, arguments), this.bindOpenKeys, this
            }, e.prototype.render = function (a) {
                return this.$el.html(a), this
            }, e.prototype.bindOpenKeys = function () {
                var b, c = this;
                return b = null, d(document).keydown(function (e) {
                    var f;
                    f = e.keyCode === 188 || e.keyCode === 191;
                    if (f && !d(e.target).is(":input")) {
                        e.preventDefault();
                        if (!c.$el.is(":visible")) return b = document.activeElement, c.$el.dialog({
                            title: a.t("titles.keyboard_shortcuts", "Keyboard Shortcuts"),
                            width: 400,
                            height: "auto",
                            open: function () {
                                return d(".navigation_list:first", this).focus()
                            },
                            close: function () {
                                d("li", this).attr("tabindex", "");
                                if (b) return d(b).focus()
                            }
                        });
                        c.$el.dialog("close");
                        if (b) return d(b).focus()
                    }
                })
            }, e
        }(f)
    })
}.call(this), define("translations/wiki.sidebar", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "جارٍ التحميل..."
                        },
                        errors: {
                            no_valid_files_selected: "لم يتم تحديد أي ملفات صالحة",
                            no_valid_image_files_selected: "لم يتم تحديد أي ملفات صور صالحة",
                            unexpected_upload_problem: "حدثت مشكلة غير متوقعة أثناء تحميل %{filename}.  يرجى المحاولة مرة أخرى.",
                            upload_failed: "فشل التحميل، الرجاء المحاولة مرة أخرى"
                        },
                        loading_more_results: "تحميل مزيد من النتائج",
                        no_title: "بلا عنوان",
                        titles: {
                            select_folder_for_uploads: "تحديد مجلد لعمليات تحميل الملفات"
                        }
                    }
                }
            },
            de: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Datei wird hochgeladen..."
                        },
                        errors: {
                            no_valid_files_selected: "Es wurden keine gültigen Dateien ausgewählt",
                            no_valid_image_files_selected: "Es wurden keine gültigen Bilddateien ausgewählt",
                            unexpected_upload_problem: "Während des Uploads von %{filename} ist ein unerwartetes Problem aufgetreten.  Bitte versuchen Sie es erneut.",
                            upload_failed: "Der Upload ist fehlgeschlagen, bitte erneut versuchen"
                        },
                        loading_more_results: "Weitere Ergebnisse laden",
                        no_title: "Ohne Titel",
                        titles: {
                            select_folder_for_uploads: "Ordner für Dateiuploads auswählen"
                        }
                    }
                }
            },
            "el-gr": {},
            "en-AU": {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Uploading..."
                        },
                        errors: {
                            no_valid_files_selected: "No valid files were selected",
                            no_valid_image_files_selected: "No valid image files were selected",
                            unexpected_upload_problem: "Unexpected problem uploading %{filename}.  Please try again.",
                            upload_failed: "Upload Failed, please try again"
                        },
                        loading_more_results: "Loading more results",
                        no_title: "No title",
                        titles: {
                            select_folder_for_uploads: "Select folder for file uploads"
                        }
                    }
                }
            },
            "en-GB": {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Uploading..."
                        },
                        errors: {
                            no_valid_files_selected: "No valid files were selected",
                            no_valid_image_files_selected: "No valid image files were selected",
                            unexpected_upload_problem: "Unexpected problem uploading %{filename}.  Please try again.",
                            upload_failed: "Upload failed. Please try again"
                        },
                        loading_more_results: "Loading more results",
                        no_title: "No title",
                        titles: {
                            select_folder_for_uploads: "Select folder for file uploads"
                        }
                    }
                }
            },
            es: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Cargando..."
                        },
                        errors: {
                            no_valid_files_selected: "No se seleccionaron archivos válidos",
                            no_valid_image_files_selected: "No se seleccionaron imagenes válidas",
                            unexpected_upload_problem: "Problema inesperado en la carga de %{filename}. Intente de nuevo.",
                            upload_failed: "La carga falló, intente de nuevo"
                        },
                        loading_more_results: "Cargando más resultados",
                        no_title: "Sin título",
                        titles: {
                            select_folder_for_uploads: "Seleccione una carpeta para cargas de archivos"
                        }
                    }
                }
            },
            fr: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Téléchargement..."
                        },
                        errors: {
                            no_valid_files_selected: "Aucun fichier valide sélectionné",
                            no_valid_image_files_selected: "Aucune image valide sélectionnée",
                            unexpected_upload_problem: "Problème inattendu lors du téléchargement de %{filename}. Veuillez réessayer.",
                            upload_failed: "Échec du téléchargement, veuillez réessayer"
                        },
                        loading_more_results: "Chargement de résultats supplémentaires",
                        no_title: "Sans titre",
                        titles: {
                            select_folder_for_uploads: "Sélectionner le dossier de téléchargement des fichiers"
                        }
                    }
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "アップロードしています..."
                        },
                        errors: {
                            no_valid_files_selected: "有効なファイルが選択されませんでした",
                            no_valid_image_files_selected: "有効な画像ファイルが選択されませんでした",
                            unexpected_upload_problem: "%{filename} のアップロードで予期せぬ問題が発生しました。もう一度、試してください。",
                            upload_failed: "アップロードに失敗しました。もう一度やり直してください"
                        },
                        loading_more_results: "より多くの結果を読み込んでいます",
                        no_title: "タイトルなし",
                        titles: {
                            select_folder_for_uploads: "ファイル アップロードのためのフォルダを選択します"
                        }
                    }
                }
            },
            ko: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "업로드 중..."
                        },
                        errors: {
                            no_valid_files_selected: "유효한 파일이 선택되지 않음",
                            no_valid_image_files_selected: "유효한 이미지 파일이 선택되지 않음",
                            unexpected_upload_problem: "%{filename}을(를) 업로드하는 중에 예기치 않은 문제가 생겼습니다.  다시 시도하시기 바랍니다.",
                            upload_failed: "업로드에 실패했습니다. 다시 시도하시기 바랍니다."
                        },
                        loading_more_results: "더 많은 결과 로드 중",
                        no_title: "제목 없음",
                        titles: {
                            select_folder_for_uploads: "파일 업로드를 위한 폴더 선택"
                        }
                    }
                }
            },
            "ko-kr": {},
            nl: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Bezig met uploaden..."
                        },
                        errors: {
                            no_valid_files_selected: "Geen geldige bestanden geselecteerd",
                            no_valid_image_files_selected: "Geen geldige afbeeldingen geselecteerd",
                            unexpected_upload_problem: "Onverwacht probleem bij het uploaden van %{filename}. Probeer het opnieuw.",
                            upload_failed: "Uploaden mislukt, probeer het opnieuw."
                        },
                        loading_more_results: "Meer resultaten aan het laden",
                        no_title: "Geen titel",
                        titles: {
                            select_folder_for_uploads: "Selecteer map voor uploads van bestanden "
                        }
                    }
                }
            },
            pl: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Trwa przekazywanie..."
                        },
                        errors: {
                            no_valid_files_selected: "Nie wybrano żadnego poprawnego pliku",
                            no_valid_image_files_selected: "Nie wybrano żadnych prawidłowych obrazów",
                            unexpected_upload_problem: "Niespodziewany problem w czasie przekazywania pliku %{filename}.  Spróbuj ponownie.",
                            upload_failed: "Przekazywanie nie powiodło się, spróbuj ponownie"
                        },
                        loading_more_results: "Trwa ładowanie większej liczby wyników",
                        no_title: "Brak tytułu",
                        titles: {
                            select_folder_for_uploads: "Wybierz folder, do którego mają być przekazane pliki"
                        }
                    }
                }
            },
            pt: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Fazendo upload..."
                        },
                        errors: {
                            no_valid_files_selected: "Nenhum arquivo válido selecionado",
                            no_valid_image_files_selected: "Nenhuma imagem válida selecionada",
                            unexpected_upload_problem: "Problema inesperado ao fazer upload de %{filename}.  Tente novamente.",
                            upload_failed: "Falha no upload, tente novamente"
                        },
                        loading_more_results: "Carregando mais resultados",
                        no_title: "Sem título",
                        titles: {
                            select_folder_for_uploads: "Selecionar pasta para uploads de arquivo"
                        }
                    }
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "Идет загрузка..."
                        },
                        errors: {
                            no_valid_files_selected: "Допустимые файлы не выбраны",
                            no_valid_image_files_selected: "Допустимые файлы изображений не выбраны",
                            unexpected_upload_problem: "Неожиданная ошибка при загрузке %{filename}.  Повторите попытку.",
                            upload_failed: "Сбой загрузки, повторите попытку"
                        },
                        loading_more_results: "Загрузка других результатов",
                        no_title: "Заголовок отсутствует",
                        titles: {
                            select_folder_for_uploads: "Выберите папку для загрузки файлов"
                        }
                    }
                }
            },
            "tr-tr": {},
            zh: {
                wiki: {
                    sidebar: {
                        buttons: {
                            uploading: "正在上传..."
                        },
                        errors: {
                            no_valid_files_selected: "未选择有效的文件",
                            no_valid_image_files_selected: "未选择有效的图像文件",
                            unexpected_upload_problem: "上传 %{filename} 时出现意外问题。请重试。",
                            upload_failed: "上传失败，请重试"
                        },
                        loading_more_results: "正在加载其它结果",
                        no_title: "无标题",
                        titles: {
                            select_folder_for_uploads: "选择文件夹进行文件上传"
                        }
                    }
                }
            },
            "zh-hans": {}
        }
    })
}), define("jqueryui/droppable", ["jquery", "jqueryui/core", "jqueryui/widget", "jqueryui/mouse", "jqueryui/draggable"], function (a) {
    a.widget("ui.droppable", {
        version: "@VERSION",
        widgetEventPrefix: "drop",
        options: {
            accept: "*",
            activeClass: !1,
            addClasses: !0,
            greedy: !1,
            hoverClass: !1,
            scope: "default",
            tolerance: "intersect"
        },
        _create: function () {
            var b = this.options,
                c = b.accept;
            this.isover = 0, this.isout = 1, this.accept = a.isFunction(c) ? c : function (a) {
                return a.is(c)
            }, this.proportions = {
                width: this.element[0].offsetWidth,
                height: this.element[0].offsetHeight
            }, a.ui.ddmanager.droppables[b.scope] = a.ui.ddmanager.droppables[b.scope] || [], a.ui.ddmanager.droppables[b.scope].push(this), b.addClasses && this.element.addClass("ui-droppable")
        },
        _destroy: function () {
            var b = a.ui.ddmanager.droppables[this.options.scope];
            for (var c = 0; c < b.length; c++) b[c] == this && b.splice(c, 1);
            this.element.removeClass("ui-droppable ui-droppable-disabled")
        },
        _setOption: function (b, c) {
            b == "accept" && (this.accept = a.isFunction(c) ? c : function (a) {
                return a.is(c)
            }), a.Widget.prototype._setOption.apply(this, arguments)
        },
        _activate: function (b) {
            var c = a.ui.ddmanager.current;
            this.options.activeClass && this.element.addClass(this.options.activeClass), c && this._trigger("activate", b, this.ui(c))
        },
        _deactivate: function (b) {
            var c = a.ui.ddmanager.current;
            this.options.activeClass && this.element.removeClass(this.options.activeClass), c && this._trigger("deactivate", b, this.ui(c))
        },
        _over: function (b) {
            var c = a.ui.ddmanager.current;
            if (!c || (c.currentItem || c.element)[0] == this.element[0]) return;
            this.accept.call(this.element[0], c.currentItem || c.element) && (this.options.hoverClass && this.element.addClass(this.options.hoverClass), this._trigger("over", b, this.ui(c)))
        },
        _out: function (b) {
            var c = a.ui.ddmanager.current;
            if (!c || (c.currentItem || c.element)[0] == this.element[0]) return;
            this.accept.call(this.element[0], c.currentItem || c.element) && (this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("out", b, this.ui(c)))
        },
        _drop: function (b, c) {
            var d = c || a.ui.ddmanager.current;
            if (!d || (d.currentItem || d.element)[0] == this.element[0]) return !1;
            var e = !1;
            return this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function () {
                var b = a.data(this, "droppable");
                if (b.options.greedy && !b.options.disabled && b.options.scope == d.options.scope && b.accept.call(b.element[0], d.currentItem || d.element) && a.ui.intersect(d, a.extend(b, {
                    offset: b.element.offset()
                }), b.options.tolerance)) return e = !0, !1
            }), e ? !1 : this.accept.call(this.element[0], d.currentItem || d.element) ? (this.options.activeClass && this.element.removeClass(this.options.activeClass), this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("drop", b, this.ui(d)), this.element) : !1
        },
        ui: function (a) {
            return {
                draggable: a.currentItem || a.element,
                helper: a.helper,
                position: a.position,
                offset: a.positionAbs
            }
        }
    }), a.ui.intersect = function (b, c, d) {
        if (!c.offset) return !1;
        var e = (b.positionAbs || b.position.absolute).left,
            f = e + b.helperProportions.width,
            g = (b.positionAbs || b.position.absolute).top,
            h = g + b.helperProportions.height,
            i = c.offset.left,
            j = i + c.proportions.width,
            k = c.offset.top,
            l = k + c.proportions.height;
        switch (d) {
        case "fit":
            return i <= e && f <= j && k <= g && h <= l;
        case "intersect":
            return i < e + b.helperProportions.width / 2 && f - b.helperProportions.width / 2 < j && k < g + b.helperProportions.height / 2 && h - b.helperProportions.height / 2 < l;
        case "pointer":
            var m = (b.positionAbs || b.position.absolute).left + (b.clickOffset || b.offset.click).left,
                n = (b.positionAbs || b.position.absolute).top + (b.clickOffset || b.offset.click).top,
                o = a.ui.isOver(n, m, k, i, c.proportions.height, c.proportions.width);
            return o;
        case "touch":
            return (g >= k && g <= l || h >= k && h <= l || g < k && h > l) && (e >= i && e <= j || f >= i && f <= j || e < i && f > j);
        default:
            return !1
        }
    }, a.ui.ddmanager = {
        current: null,
        droppables: {
            "default": []
        },
        prepareOffsets: function (b, c) {
            var d = a.ui.ddmanager.droppables[b.options.scope] || [],
                e = c ? c.type : null,
                f = (b.currentItem || b.element).find(":data(droppable)").andSelf();
            a: for (var g = 0; g < d.length; g++) {
                if (d[g].options.disabled || b && !d[g].accept.call(d[g].element[0], b.currentItem || b.element)) continue;
                for (var h = 0; h < f.length; h++) if (f[h] == d[g].element[0]) {
                    d[g].proportions.height = 0;
                    continue a
                }
                d[g].visible = d[g].element.css("display") != "none";
                if (!d[g].visible) continue;
                e == "mousedown" && d[g]._activate.call(d[g], c), d[g].offset = d[g].element.offset(), d[g].proportions = {
                    width: d[g].element[0].offsetWidth,
                    height: d[g].element[0].offsetHeight
                }
            }
        },
        drop: function (b, c) {
            var d = !1;
            return a.each(a.ui.ddmanager.droppables[b.options.scope] || [], function () {
                if (!this.options) return;
                !this.options.disabled && this.visible && a.ui.intersect(b, this, this.options.tolerance) && (d = this._drop.call(this, c) || d), !this.options.disabled && this.visible && this.accept.call(this.element[0], b.currentItem || b.element) && (this.isout = 1, this.isover = 0, this._deactivate.call(this, c))
            }), d
        },
        dragStart: function (b, c) {
            b.element.parentsUntil("body").bind("scroll.droppable", function () {
                b.options.refreshPositions || a.ui.ddmanager.prepareOffsets(b, c)
            })
        },
        drag: function (b, c) {
            b.options.refreshPositions && a.ui.ddmanager.prepareOffsets(b, c), a.each(a.ui.ddmanager.droppables[b.options.scope] || [], function () {
                if (this.options.disabled || this.greedyChild || !this.visible) return;
                var d = a.ui.intersect(b, this, this.options.tolerance),
                    e = !d && this.isover == 1 ? "isout" : d && this.isover == 0 ? "isover" : null;
                if (!e) return;
                var f;
                if (this.options.greedy) {
                    var g = this.element.parents(":data(droppable):eq(0)");
                    g.length && (f = a.data(g[0], "droppable"), f.greedyChild = e == "isover" ? 1 : 0)
                }
                f && e == "isover" && (f.isover = 0, f.isout = 1, f._out.call(f, c)), this[e] = 1, this[e == "isout" ? "isover" : "isout"] = 0, this[e == "isover" ? "_over" : "_out"].call(this, c), f && e == "isout" && (f.isout = 0, f.isover = 1, f._over.call(f, c))
            })
        },
        dragStop: function (b, c) {
            b.element.parentsUntil("body").unbind("scroll.droppable"), b.options.refreshPositions || a.ui.ddmanager.prepareOffsets(b, c)
        }
    }
}), define("jquery.inst_tree", ["jquery", "underscore", "jqueryui/draggable", "jqueryui/droppable"], function (a, b) {
    a.fn.instTree = function (b) {
        return a(this).each(function () {
            var c = !1,
                d = a(this),
                e = this,
                f = null;
            e.options = {
                autoclose: !0,
                overrideEvents: !1,
                multi: !0,
                dragdrop: !0,
                onClick: !1,
                onDblClick: !1,
                onExpand: !1,
                onCollapse: !1,
                onAddNode: !1,
                onEditNode: !1,
                onDeleteNode: !1,
                onDrag: !1,
                onDrop: !1
            }, e.opts = a.extend({}, e.options, b), a.fn.instTree.InitInstTree = function (b) {
                d = a(b);
                var f = '<li class="separator"></li>';
                d.find("li:not(.separator)").filter(function () {
                    return !a(this).prev("li.separator").get(0) && !a(this).parents("ul.non-instTree").get(0)
                }).each(function () {
                    a(this).before(f)
                }), d.find("li > span").not(".sign").not(".clr").addClass("text").attr("unselectable", "on"), d.find("li:not(.separator)").filter(function () {
                    return !a(this).parents("ul.non-instTree").get(0)
                }).filter(":has(ul)").addClass("node").end().filter(":not(.node)").addClass("leaf"), e.IeSetStyles(), e.Clean(), e.AddSigns(), c || e.BindEvents(b), e.opts.dragdrop && (e.CancelDragDrop(b), e.InitDragDrop(b))
            }, e.InitDragDrop = function (b) {
                d = a(b), d.find("span.text").draggable({
                    cursor: a.browser.msie ? "default" : "move",
                    distance: 3,
                    helper: function () {
                        return a('<div id="instTree-drag"><span>' + a(this).text() + "</span></div>")
                    },
                    appendTo: d
                }), d.find("li.separator").droppable({
                    accept: "span.text",
                    hoverClass: "dd-hover"
                }), d.find("span.text").bind("dragstart", function (b, c) {
                    d = a(this).parents("ul.instTree:first");
                    var f = a(this).parent("li"),
                        g = a("div#instTree-drag");
                    a.browser.msie && d.find("li.separator").removeClass("dd-hover"), a.browser.opera && g.css("margin-top", "10px"), f.is(".leaf") ? (g.addClass("leaf"), a.browser.msie && g.css("background", "#C3E1FF url(" + e.opts.imgFolder + "leaf-drag.gif) left 3px no-repeat")) : f.is(".node") && g.addClass("node"), f.prev("li.separator").addClass("alt").end().addClass("alt"), typeof e.opts.onDrag == "function" && e.opts.onDrag(b, f)
                }), d.find("li.separator").bind("dropover", function (b, c) {
                    f = a(this)
                }), d.find("li.separator").bind("dropout", function (a, b) {
                    f = null
                }), d.find("span.text").bind("dragstop", function (c, g) {
                    var h = !0;
                    if (f) {
                        var i = d.find("li.alt:not(.separator):eq(0)"),
                            j = f.parents("li.node:eq(0)");
                        i.is(".node") && j.is(".fixedLevel") && (h = !1)
                    }
                    f && h ? (f.before(d.find("li.alt").remove().removeClass("alt")), f = null, typeof e.opts.onDrop == "function" && e.opts.onDrop(c, i), a.fn.instTree.InitInstTree(b)) : d.find("li.alt").removeClass("alt")
                })
            }, e.CancelDragDrop = function (b) {
                d = a(b), d.find("span.text").draggable("destroy"), d.find("li.separator").droppable("destroy"), d.find("li.separator").unbind(), d.find("span.text").unbind()
            }, a.fn.instTree.AddNode = function (b, c) {
                d = a(b);
                var f = d.find("span.active").get(0);
                if (f) {
                    var g = a(f).parents("li:first"),
                        h = a(f).parents("li.node:first");
                    if (!h.is(".fixedLevel") || c != "node") {
                        var i = c == "leaf" ? "" : ' class="node"',
                            j = '<li class="separator"></li>',
                            k = "<li" + i + '><span class="text">&nbsp;</span><input type="text" value="New item" /></li>',
                            l = j + k,
                            m = !1,
                            n, o, p;
                        g.is(".leaf") ? (g.after(l), n = g.nextAll("li:not(.separator):first"), p = g.parent(), m = !0) : g.is(".node") && (o = g.children("ul").get(0), o ? (a(o).append(l), n = a(o).children("li:not(.separator):last")) : (g.append("<ul>" + l + "</ul>"), o = g.children("ul").get(0), n = a(o).children("li:not(.separator):last")), e.ExpandNode(b, g), p = g, m = !0), m && (a(f).removeClass("active"), p.find("input:text").focus().select().blur(function () {
                            e.SaveInput(b, a(this))
                        })), a.fn.instTree.InitInstTree(b), typeof e.opts.onAddNode == "function" && e.opts.onAddNode(n)
                    }
                }
            }, a.fn.instTree.EditNode = function (b) {
                d = a(b);
                var c = d.find("span.active").get(0);
                if (c) {
                    var f = a(c).parents("li:first");
                    a(c).replaceWith('<span class="text">&nbsp;</span><input type="text" value="' + a(c).text() + '" />'), f.find("input:text").focus().select().blur(function () {
                        e.SaveInput(b, a(this))
                    }), typeof e.opts.onEditNode == "function" && e.opts.onEditNode(f)
                }
            }, a.fn.instTree.DeleteNode = function (b) {
                d = a(b);
                var c = d.find("span.active").get(0);
                if (c) {
                    var f = a(c).parents("li:first"),
                        g = f.parents("li.node:first");
                    f.prev("li.separator").remove().end().remove(), a.fn.instTree.InitInstTree(b), typeof e.opts.onDeleteNode == "function" && e.opts.onDeleteNode(f, g)
                }
            }, e.SaveInput = function (b, c) {
                c.prev("span.text").remove();
                var d = a.trim(c.get(0).value) !== "" ? c.get(0).value : "_____";
                c.replaceWith('<span class="active text">' + d + "</span>"), a.fn.instTree.InitInstTree(b)
            }, e.IeSetStyles = function () {
                a.browser.msie && (d.find("li.node:not(.open) > ul").hide(), d.find("li.node.open > ul").css("margin-bottom", "1px"))
            }, e.Clean = function () {
                d.find("li:not(.separator)").each(function () {
                    a(this).removeClass("last"), (!a(this).next("li").length || a(this).find("ul").length) && a(this).addClass("last")
                })
            }, e.AddSigns = function () {
                d.find("li.node").each(function () {
                    a(this).hasClass("open") ? a(this).find("span.sign").remove().end().append('<span class="sign minus"></span>') : a(this).find("span.sign").remove().end().append('<span class="sign plus"></span>')
                })
            }, e.BindEvents = function (b) {
                d.on("keydown", function (c) {
                    var f = d.find('[aria-selected="true"]'),
                        g = a("#file_list_container");
                    switch (c.which) {
                    case 38:
                        c.preventDefault(), c.stopPropagation();
                        var h = e.FindNode(f, "up");
                        e.SelectNode(h), g.scrollTop(e.FileScrollOffset(h, g));
                        break;
                    case 40:
                        c.preventDefault(), c.stopPropagation();
                        var i = e.FindNode(f, "down");
                        e.SelectNode(i), g.scrollTop(e.FileScrollOffset(i, g));
                        break;
                    case 37:
                        c.preventDefault(), c.stopPropagation();
                        var j = f.attr("aria-expanded");
                        if (f.hasClass("node") && j === "true") e.CollapseNode(f);
                        else if (typeof j == "undefined" || j === !1 || j === "false") {
                            var k = f.parents(".node").eq(0);
                            e.SelectNode(k), g.scrollTop(e.FileScrollOffset(k, g))
                        }
                        break;
                    case 39:
                        c.preventDefault(), c.stopPropagation();
                        var j = f.attr("aria-expanded");
                        if (f.hasClass("node") && j !== "true") e.ExpandNode(b, f);
                        else if (j === "true") {
                            var i = e.FindNode(f, "down");
                            e.SelectNode(i), g.scrollTop(e.FileScrollOffset(i, g))
                        }
                        break;
                    case 13:
                        c.preventDefault(), c.stopPropagation(), node = f, typeof e.opts.onEnter == "function" && e.opts.onEnter.call(this, c, node);
                        break;
                    case 35:
                        c.preventDefault(), c.stopPropagation();
                        var l = a('[role="treeitem"]:visible'),
                            m = l.last();
                        e.SelectNode(m), g.scrollTop(e.FileScrollOffset(m, g));
                        break;
                    case 36:
                        c.preventDefault(), c.stopPropagation();
                        var l = a('[role="treeitem"]:visible'),
                            n = l.first();
                        e.SelectNode(n), g.scrollTop(e.FileScrollOffset(n, g))
                    }
                }), d.click(function (c) {
                    var d = a(this).closest(".instTree"),
                        f = a(c.target),
                        g;
                    f.is("span.sign") ? (g = f.parents("li:eq(0)"), e.ToggleNode(b, g)) : f.is("span.text") && (g = f.closest("li"), typeof e.opts.onClick == "function" ? (e.opts.overrideEvents || ((!e.opts.multi || !c.ctrlKey) && d.find(".active").removeClass("active").end().find(".active-leaf").removeClass("active-leaf").end().find(".active-node").removeClass("active-node"), f.addClass("active"), g.hasClass("leaf") ? g.addClass("active-leaf") : g.addClass("active-node")), e.opts.onClick.call(g, c, g)) : ((!e.opts.multi || !c.ctrlKey) && d.find(".active").removeClass("active").end().find(".active-leaf").removeClass("active-leaf").end().find(".active-node").removeClass("active-node"), f.addClass("active"), g.hasClass("leaf") ? g.addClass("active-leaf") : g.addClass("active-node")))
                }), d.dblclick(function (c) {
                    var d = a(c.target);
                    if (d.is("span.text")) {
                        var f = d.parents("li:eq(0)");
                        typeof e.opts.onDblClick == "function" ? (!e.opts.overrideEvents && f.is(".node") && e.ToggleNode(b, f), e.opts.onDblClick.call(f, c, f)) : f.is(".node") && e.ToggleNode(b, f)
                    }
                }), c = !0
            }, e.ToggleNode = function (a, b) {
                b.hasClass("open") ? e.CollapseNode(b) : e.ExpandNode(a, b), e.Clean()
            }, e.ExpandNode = function (b, c) {
                c.addClass("open"), c.attr("aria-expanded", !0), e.opts.autoclose && c.siblings(".open").each(function () {
                    e.CollapseNode(a(this))
                }), a.browser.msie && (c.children("ul").show().css({
                    "margin-bottom": "1px",
                    visibility: "visible"
                }), c.children("ul").find("li.node:not(.open) > ul").each(function () {
                    a(this).css("visibility", "hidden")
                }));
                var d = c.find("span.sign:last");
                d.removeClass("plus").addClass("minus"), e.opts.multi && a.fn.instTree.InitInstTree(b), typeof e.opts.onExpand == "function" && e.opts.onExpand(c)
            }, e.CollapseNode = function (b) {
                b.removeClass("open"), b.attr("aria-expanded", !1), a.browser.msie && b.children("ul").hide();
                var c = b.find("span.sign:last");
                c.removeClass("minus").addClass("plus"), typeof e.opts.onCollapse == "function" && e.opts.onCollapse(b)
            }, e.SelectNode = function (a) {
                a.length && (d.attr("aria-activedescendant", a.attr("id")), d.find('[aria-selected="true"]').attr("aria-selected", "false"), a.attr("aria-selected", "true"))
            }, e.FindNode = function (b, c) {
                var d = a('[role="treeitem"]:visible'),
                    e = d.index(b),
                    f = e;
                c == "up" ? f-- : f++;
                var g = f >= 0 ? d.get(f) : d.get(e),
                    h = a(g).data("indexPosition", f);
                return h
            }, e.FileScrollOffset = function (a, b) {
                var c = a.data("indexPosition"),
                    d = b.find(".leaf").first().height() || 20,
                    e = a.siblings(".separator").first().height() || 2,
                    f = e * c,
                    g = d * c,
                    h = b.height() / 2;
                return g + f - h
            }, a(this).is("ul") && (d = a(this), d.addClass("instTree"), a.fn.instTree.InitInstTree(e))
        })
    }
}), define("instructure_helper", ["INST", "i18n!instructure", "jquery", "jqueryui/dialog"], function (a, b, c) {
    function d(a) {
        a = (a || "").split(":")[0];
        var b = a.split("."),
            c = b.length;
        return (c > 1 ? [b[c - 2], b[c - 1]] : b).join("")
    }
    var e = d(window.location.hostname);
    c.expr[":"].external = function (a) {
        var b = c(a).attr("href");
        return !!(b && b.length && !b.match(/^(mailto\:|javascript\:)/) && a.hostname && d(a.hostname) != e)
    }, window.equella = {
        ready: function (a) {
            c(document).triggerHandler("equella_ready", a)
        },
        cancel: function () {
            c(document).triggerHandler("equella_cancel")
        }
    }, c(document).bind("equella_ready", function (a, b) {
        c("#equella_dialog").triggerHandler("equella_ready", b)
    }).bind("equella_cancel", function () {
        c("#equella_dialog").dialog("close")
    }), window.external_tool = {
        ready: function (a) {
            c("#external_tool_button_dialog:visible").triggerHandler("selection", a), c("#resource_selection_dialog:visible").triggerHandler("selection", a), c("#homework_selection_dialog:visible").triggerHandler("selection", a)
        },
        cancel: function () {
            c("#external_tool_button_dialog").dialog("close"), c("#resource_selection_dialog").dialog("close"), c("#homework_selection_dialog:visible").dialog("close")
        }
    }, window.jsonFlickrApi = function (a) {
        c("#instructure_image_search").triggerHandler("search_results", a)
    }
}), define("jquery.dropdownList", ["jquery"], function (a) {
    a.fn.dropdownList = function (b) {
        if (this.length) {
            var c = a("#instructure_dropdown_list");
            if (b == "hide" || b == "remove" || c.data("current_dropdown_initiator") == this[0]) {
                c.remove().data("current_dropdown_initiator", null);
                return
            }
            var b = a.extend({}, a.fn.dropdownList.defaults, b),
                d = c.children("div.list");
            d.length || (c = a("<div id='instructure_dropdown_list'><div class='list ui-widget-content'></div></div>").appendTo("body"), a(document).mousedown(function (b) {
                c.data("current_dropdown_initiator") && !a(b.target).closest("#instructure_dropdown_list").length && c.hide().data("current_dropdown_initiator", null)
            }).mouseup(function (b) {
                c.data("current_dropdown_initiator") && !a(b.target).closest("#instructure_dropdown_list").length && (c.hide(), setTimeout(function () {
                    c.data("current_dropdown_initiator", null)
                }, 100))
            }).add(this).add(c).keydown(function (a) {
                if (c.data("current_dropdown_initiator")) {
                    var b = c.find(".ui-state-hover,.ui-state-active");
                    if (a.keyCode == 38) return b.length && b.prev().length ? b.removeClass("ui-state-hover ui-state-active").addClass("minimal").prev().addClass("ui-state-hover").removeClass("minimal").find("span").focus() : $item.focus(), !1;
                    if (a.keyCode == 40) return b.length ? b.next().length && b.removeClass("ui-state-hover ui-state-active").addClass("minimal").next().addClass("ui-state-hover").removeClass("minimal").find("span").focus() : c.find(".option:first").addClass("ui-state-hover").removeClass("minimal").find("span").focus(), !1;
                    if (a.keyCode == 13 && b.length) return b.click(), !1;
                    c.hide().data("current_dropdown_initiator", null)
                }
            }), c.find(".option").removeClass("ui-state-hover ui-state-active").addClass("minimal"), c.click(function (a) {
                c.hide().data("current_dropdown_initiator", null)
            }), d = c.children("div.list")), c.data("current_dropdown_initiator", this[0]), b.width && c.width(b.width), b.height && c.find(".list").css("maxHeight", b.height), d.empty(), a.each(b.options, function (b, c) {
                var e = a("<div class='option minimal' style='cursor: pointer; padding: 2px 5px; overflow: hidden; white-space: nowrap;'>  <span tabindex='-1'>" + b + "</span>" + "</div>").appendTo(d);
                if (a.isFunction(c)) {
                    function f() {
                        e.parent().find("div.option").removeClass("ui-state-hover ui-state-active").addClass("minimal")
                    }
                    e.addClass("ui-state-default").bind({
                        mouseenter: function () {
                            f(), e.addClass("ui-state-hover").removeClass("minimal")
                        },
                        mouseleave: f,
                        mousedown: function (a) {
                            a.preventDefault(), f(), e.addClass("ui-state-active").removeClass("minimal")
                        },
                        mouseup: f,
                        click: c
                    })
                } else e.addClass("ui-state-disabled").bind({
                    mousedown: function (a) {
                        a.preventDefault()
                    }
                })
            });
            var e = this.offset(),
                f = this.outerHeight(),
                g = this.outerWidth();
            c.css({
                whiteSpace: "nowrap",
                position: "absolute",
                top: e.top + f,
                left: e.left + 5,
                right: ""
            }).hide().show(), c.offset().left + c.width() > a(window).width() && c.css({
                left: "",
                right: 0
            })
        }
        return this
    }, a.fn.dropdownList.defaults = {
        height: 250,
        width: "auto"
    }
}), define("jquery.loadingImg", ["jquery"], function (a) {
    a.fn.loadingImg = function (b) {
        if (!this || this.length === 0) return this;
        var c = this.filter(":first"),
            d;
        if (b == "hide" || b == "remove") {
            c.children(".loading_image").remove(), d = c.data("loading_images") || [];
            for (var e in d) d[e] && d[e].remove();
            return c.data("loading_images", null), this
        }
        if (b == "remove_once") {
            c.children(".loading_image").remove(), d = c.data("loading_images") || [];
            var f = d.pop();
            return f && f.remove(), c.data("loading_images", d), this
        }
        b == "register_image" && arguments.length == 3 && (a.fn.loadingImg.image_files[arguments[1]] = arguments[2]), b = a.extend({}, a.fn.loadingImg.defaults, b);
        var g = a.fn.loadingImg.image_files.normal;
        b.image_size && a.fn.loadingImg.image_files[b.image_size] && (g = a.fn.loadingImg.image_files[b.image_size]), b.paddingTop && (b.vertical = b.paddingTop);
        var h = 0;
        b.vertical && b.vertical != "top" && (b.vertical == "bottom" ? h = c.outerHeight() : b.vertical == "middle" ? h = c.outerHeight() / 2 - g.height / 2 : (h = parseInt(b.vertical, 10), isNaN(h) && (h = 0)));
        var i = 0;
        b.horizontal && b.horizontal != "left" && (b.horizontal == "right" ? i = c.outerWidth() - g.width : b.horizontal == "middle" ? i = c.outerWidth() / 2 - g.width / 2 : (i = parseInt(b.horizontal, 10), isNaN(i) && (i = 0)));
        var j = c.zIndex() + 1,
            k = a(document.createElement("div")).addClass("loading_image_holder"),
            l = a(document.createElement("img")).attr("src", g.url);
        k.append(l), d = c.data("loading_images") || [], d.push(k), c.data("loading_images", d);
        if (!c.css("position") || c.css("position") == "static") {
            var m = c.offset(),
                n = m.top,
                o = m.left;
            b.vertical && (n += h), b.horizontal && (o += i), k.css({
                zIndex: j,
                position: "absolute",
                top: n,
                left: o
            }), a("body").append(k)
        } else k.css({
            zIndex: j,
            position: "absolute",
            top: h,
            left: i
        }), c.append(k);
        return a(this)
    }, a.fn.loadingImg.defaults = {
        paddingTop: 0,
        image_size: "normal",
        vertical: 0,
        horizontal: 0
    }, a.fn.loadingImg.image_files = {
        normal: {
            url: "/images/ajax-loader.gif",
            width: 32,
            height: 32
        },
        small: {
            url: "/images/ajax-loader-small.gif",
            width: 16,
            height: 16
        }
    }, a.fn.loadingImage = a.fn.loadingImg
}), function () {
    define("compiled/jquery/fixDialogButtons", ["jquery", "underscore", "compiled/fn/preventDefault", "jqueryui/dialog"], function (a, b, c) {
        return a.fn.fixDialogButtons = function () {
            return this.each(function () {
                var d, e, f;
                e = a(this), d = e.find(".button-container:last .btn, button[type=submit]");
                if (d.length) return e.find(".button-container:last, button[type=submit]").hide(), f = a.map(d.toArray(), function (b) {
                    var d, f, g, h;
                    return d = a(b), f = (h = d.attr("class")) != null ? h : "", g = d.attr("id"), d.is(".dialog_closer") && (d.off(".fixdialogbuttons"), d.on("click.fixdialogbuttons", c(function () {
                        return e.dialog("close")
                    }))), d.prop("type") === "submit" && d[0].form && (f += " button_type_submit", e.off(".fixdialogbuttons"), e.on("keyup.fixdialogbuttons", function (b) {
                        if (!a(b.target).filter("input:text").length) return;
                        if (b.keyCode === a.ui.keyCode.ENTER) return a(d[0].form).submit()
                    })), {
                        text: d.text(),
                        "data-text-while-loading": d.data("textWhileLoading"),
                        click: function () {
                            return d.click()
                        },
                        "class": f,
                        id: g
                    }
                }), f = b.sortBy(f, function (a) {
                    return a["class"].match(/btn-primary/) ? 1 : 0
                }), e.dialog("option", "buttons", f)
            })
        }
    })
}.call(this), define("translations/media_comments", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "تم تعطيل Kaltura لموقع Canvas هذا"
                    },
                    buttons: {
                        submit: "إرسال ملف الوسائط"
                    },
                    cancel: "إلغاء",
                    click_to_view: "انقر للعرض",
                    errors: {
                        file_too_large: "*هذا الملف كبير للغاية.* أقصى حد للحجم هو %{size}ميجابايت.",
                        load_failed: "فشل تحميل تطبيق تعليق الوسائط.  يرجى المحاولة مرة أخرى.",
                        media_comment_installation_broken: "تم إعداد تعليق الوسائط بشكل صحيح. يرجى الاتصال بالمسؤول.",
                        must_be_logged_in: "عليك أن تكون مسجَلاً لتسجيل الوسائط.",
                        persistent_problem: "في حالة استمرار حدوث هذه المشكلة، قد ترغب في محاولة تسجيل وسائطك محليًا، ثم تحميل الملف المحفوظ بدلاً من ذلك.",
                        save_failed: "يبدو أن الحفظ قد فشل.  الرجاء إغلاق هذه النافذة المنسدلة للمحاولة مرة أخرى.",
                        save_failed_try_again: "فشل حفظ الإدخال.  يرجى المحاولة مرة أخرى.",
                        upload_failed: "فشل التحديث مع حدوث خطأ:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "تصغير المحتوى المضمَّن"
                    },
                    loading: "جارٍ تحميل الوسائط...",
                    media_still_converting: "جارٍ حاليًا تحويل الوسائط، الرجاء إعادة المحاولة بعد قليل.",
                    messages: {
                        file_failed_to_load: "فشل تحميل ملف الوسائط هذا",
                        flash_required_record_audio: "مطلوب Flash لتسجيل الصوت.",
                        flash_required_upload_audio: "مطلوب Flash لتحميل الصوت.",
                        flash_required_upload_video: "مطلوب Flash لتحميل الفيديو.",
                        loading: "جارٍ التحميل...",
                        submitted: "ملف الوسائط المرسل!",
                        submitting: "جارٍ إرسال ملف الوسائط..."
                    },
                    titles: {
                        media_contribution: "مساهمة الوسائط",
                        play_comment: "تشغيل تعليق الوسائط",
                        record_upload_media_comment: "تسجيل/تحميل تعليق الوسائط"
                    },
                    track_uploaded_successfully: "تم تحميل المقطع بنجاح، قم بالتحديث لعرضه.",
                    upload: "تحميل",
                    uploading: "جارٍ التحميل..."
                }
            },
            de: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "Kaltura wurde für diese Canvas-Site deaktiviert"
                    },
                    buttons: {
                        submit: "Multimedia-datei einsenden"
                    },
                    cancel: "Abbrechen",
                    click_to_view: "Zum Anzeigen klicken",
                    errors: {
                        file_too_large: "*Diese Datei ist zu groß.* Die maximal zulässige Größe beträgt %{size} MB.",
                        load_failed: "Anwendung für Multimediakommentar konnte nicht geladen werden.  Bitte versuchen Sie es erneut.",
                        media_comment_installation_broken: "Die Funktion zum Hochladen von Multimediakommentaren wurde nicht ordnungsgemäß eingerichtet. Wenden Sie sich an Ihren Administrator.",
                        must_be_logged_in: "Für die Aufnahme von Multimedia müssen Sie angemeldet sein.",
                        persistent_problem: "Wenn dieses Problem weiterhin besteht, probieren Sie, Ihre Medien lokal aufzunehmen und laden anschließend die gespeicherte Datei hoch.",
                        save_failed: "Das Speichern ist offenbar fehlgeschlagen.  Bitte schließen Sie dieses Popup-fenster und versuchen Sie es erneut.",
                        save_failed_try_again: "Der Eintrag konnte nicht gespeichert werden.  Bitte versuchen Sie es erneut.",
                        upload_failed: "Hochladevorgang ist fehlgeschlagen  bei folgendem Fehler:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Eingebettete Inhalte minimieren"
                    },
                    loading: "Medien werden geladen...",
                    media_still_converting: "Die Medien werden derzeit konvertiert. Versuchen Sie es in Kürze erneut.",
                    messages: {
                        file_failed_to_load: "Diese Multimedia-datei konnte nicht geladen werden",
                        flash_required_record_audio: "Für Audioaufnahmen wird Flash benötigt.",
                        flash_required_upload_audio: "Um Audiodaten hochzuladen, wird Flash benötigt.",
                        flash_required_upload_video: "Um Videodaten hochzuladen, wird Flash benötigt.",
                        loading: "Ladevorgang läuft...",
                        submitted: "Multimedia-datei erfolgreich eingesandt!",
                        submitting: "Multimedia-datei wird eingesandt..."
                    },
                    titles: {
                        media_contribution: "Multimedia-beitrag",
                        play_comment: "Multimediakommentar wiedergeben",
                        record_upload_media_comment: "Multimediakommentar aufzeichnen/hochladen"
                    },
                    track_uploaded_successfully: "Titel erfolgreich hochgeladen. Zum Anzeigen aktualisieren",
                    upload: "Hochladen",
                    uploading: "Wird hochgeladen..."
                }
            },
            "el-gr": {},
            "en-AU": {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "Kaltura has been disabled for this Canvas site"
                    },
                    buttons: {
                        submit: "Submit Media File"
                    },
                    cancel: "Cancel",
                    click_to_view: "Click to view",
                    errors: {
                        file_too_large: "*This file is too large.* The maximum size is %{size}MB.",
                        load_failed: "Media Comment Application failed to load.  Please try again.",
                        media_comment_installation_broken: "Media comment uploading has not been set up properly. Please contact your administrator.",
                        must_be_logged_in: "You must be logged in to record media.",
                        persistent_problem: "If this problem keeps happening, you may want to try recording your media locally and then uploading the saved file instead.",
                        save_failed: "Saving appears to have failed.  Please close this popup to try again.",
                        save_failed_try_again: "Entry failed to save.  Please try again.",
                        upload_failed: "Upload failed with error:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Minimise embedded content"
                    },
                    loading: "Loading media...",
                    media_still_converting: "Media is currently being converted, please try again in a little bit.",
                    messages: {
                        file_failed_to_load: "This media file failed to load",
                        flash_required_record_audio: "Flash required for recording audio.",
                        flash_required_upload_audio: "Flash required for uploading audio.",
                        flash_required_upload_video: "Flash required for uploading video.",
                        loading: "Loading...",
                        submitted: "Submitted Media File!",
                        submitting: "Submitting Media File..."
                    },
                    titles: {
                        media_contribution: "Media Contribution",
                        play_comment: "Play Media Comment",
                        record_upload_media_comment: "Record/Upload Media Comment"
                    },
                    track_uploaded_successfully: "Track uploaded successfuly, refresh to see it.",
                    upload: "Upload",
                    uploading: "Uploading..."
                }
            },
            "en-GB": {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "Kaltura has been disabled for this Canvas site"
                    },
                    buttons: {
                        submit: "Submit media file"
                    },
                    cancel: "Cancel",
                    click_to_view: "Click to view",
                    errors: {
                        file_too_large: "*This file is too large.* The maximum size is %{size}MB.",
                        load_failed: "Media comment application failed to load.  Please try again.",
                        media_comment_installation_broken: "Media comment uploading has not been set up properly. Please contact your administrator.",
                        must_be_logged_in: "You must be logged in to record media.",
                        persistent_problem: "If this problem keeps happening, you may want to try recording your media locally and then uploading the saved file instead.",
                        save_failed: "Saving appears to have failed.  Please close this popup to try again.",
                        save_failed_try_again: "Entry failed to save.  Please try again.",
                        upload_failed: "Upload failed with error:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Minimise embedded content"
                    },
                    loading: "Loading media...",
                    media_still_converting: "Media is currently being converted. Please try again in a little bit.",
                    messages: {
                        file_failed_to_load: "This media file failed to load",
                        flash_required_record_audio: "Flash required for recording audio.",
                        flash_required_upload_audio: "Flash required for uploading audio.",
                        flash_required_upload_video: "Flash required for uploading video.",
                        loading: "Loading...",
                        submitted: "Submitted media file!",
                        submitting: "Submitting media file..."
                    },
                    titles: {
                        media_contribution: "Media contribution",
                        play_comment: "Play media comment",
                        record_upload_media_comment: "Record/upload media comment"
                    },
                    track_uploaded_successfully: "Track uploaded successfuly, refresh to see it.",
                    upload: "Upload",
                    uploading: "Uploading..."
                }
            },
            es: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "Kaltura ha sido desactivado para este sitio de Canvas"
                    },
                    buttons: {
                        submit: "Enviar Archivo de Media"
                    },
                    cancel: "Cancelar",
                    click_to_view: "Haga clic para ver",
                    errors: {
                        file_too_large: "*Este archivo es muy grande.* El tamaño máximo es de %{size}MB.",
                        load_failed: "La carga de medios de aplicación de comentario parecen haber fallado. Intente de nuevo.",
                        media_comment_installation_broken: "La función de carga de comentarios multimedia no se ha configurado correctamente. Por favor, póngase en contacto con el administrador.",
                        must_be_logged_in: "Debe estar conectado para grabar media.",
                        persistent_problem: "Si este problema sigue ocurriendo, puede tratar de grabar su media localmente y luego cargar el archivo guardado.",
                        save_failed: "El guardado parece haber fallado. Por favor cierre esta ventana emergente e intente de nuevo.",
                        save_failed_try_again: "El guardado de la entrada falló. Intente de nuevo.",
                        upload_failed: "La carga falló con un error:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Minimizar contenido incrustado"
                    },
                    loading: "Cargando archivo multimedia...",
                    media_still_converting: "El archivo multimedia se está convirtiendo aún. Inténtelo de nuevo más tarde.",
                    messages: {
                        file_failed_to_load: "La carga de este archivo de media falló",
                        flash_required_record_audio: "Se requiere Flash para grabar audio.",
                        flash_required_upload_audio: "Se requiere Flash para cargar audio.",
                        flash_required_upload_video: "Se requiere Flash para cargar video.",
                        loading: "Cargando...",
                        submitted: "¡Se envió un archivo de media!",
                        submitting: "Enviando un Archivo de Media..."
                    },
                    titles: {
                        media_contribution: "Contribución de Media",
                        play_comment: "Reproduzca Comentarios de Media",
                        record_upload_media_comment: "Grabar/cargar comentario de media"
                    },
                    track_uploaded_successfully: "Pista cargada correctamente. Actualice para verla.",
                    upload: "Cargar",
                    uploading: "Cargando..."
                }
            },
            fr: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "Kaltura a été désactivé pour ce site Canvas."
                    },
                    buttons: {
                        submit: "Envoyer un fichier multimédia"
                    },
                    cancel: "Annuler",
                    click_to_view: "Cliquer pour afficher",
                    errors: {
                        file_too_large: "*Ce fichier est trop volumineux.* La taille maximum autorisée est de %{size} Mo.",
                        load_failed: "Échec du chargement de l’application des commentaires multimédias. Veuillez réessayer.",
                        media_comment_installation_broken: "L’envoi des commentaires n’a pas été configuré correctement. Veuillez contacter votre administrateur.",
                        must_be_logged_in: "Vous devez vous connecter pour enregistrer un fichier multimédia.",
                        persistent_problem: "Si ce problème persiste, essayez d’enregistrer votre fichier multimédia localement, puis téléchargez le fichier enregistré.",
                        save_failed: "Échec de l’enregistrement. Pour réessayer, fermez cet écran.",
                        save_failed_try_again: "Échec de l’enregistrement de l’entrée. Veuillez réessayer.",
                        upload_failed: "Échec du téléchargement avec une erreur :"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Réduire le contenu incorporé"
                    },
                    loading: "Chargement du support...",
                    media_still_converting: "Conversion du support... Veuillez réessayer ultérieurement.",
                    messages: {
                        file_failed_to_load: "Échec de chargement du fichier multimédia",
                        flash_required_record_audio: "Flash est requis pour l’enregistrement audio.",
                        flash_required_upload_audio: "Flash est requis pour le téléchargement audio.",
                        flash_required_upload_video: "Flash est requis pour le téléchargement vidéo.",
                        loading: "Chargement en cours...",
                        submitted: "Fichier multimédia envoyé",
                        submitting: "Envoi du fichier multimédia..."
                    },
                    titles: {
                        media_contribution: "Contribution multimédia",
                        play_comment: "Lire le commentaire multimédia",
                        record_upload_media_comment: "Enregistrer/Télécharger le commentaire multimédia"
                    },
                    track_uploaded_successfully: "Informations chargées. Réactualisez l’affichage pour les voir.",
                    upload: "Charger",
                    uploading: "Chargement..."
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "この Canvas サイトは、Kaltura が無効になっています"
                    },
                    buttons: {
                        submit: "メディア ファイルの提出"
                    },
                    cancel: "キャンセル",
                    click_to_view: "クリックで表示",
                    errors: {
                        file_too_large: "*このファイルは大きすぎます。* 最大サイズは %{size}MB です。",
                        load_failed: "メディア コメント アプリケーションの読み込みに失敗しました。もう一度、試してください。",
                        media_comment_installation_broken: "メディア コメントのアップロードが正しく設定されていません。管理者に連絡してください。",
                        must_be_logged_in: "メディアを記録するにはログインする必要があります。",
                        persistent_problem: "この問題が解決しない場合は、メディアの記録をローカルで行い、保存したファイルをアップロードすることもできます。",
                        save_failed: "保存が失敗したようです。このポップアップを閉じて、もう一度試してください。",
                        save_failed_try_again: "エントリの保存に失敗しました。もう一度、試してください。",
                        upload_failed: "アップロードが失敗し、次のエラーが発生しました:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "埋め込みコンテンツを最小化する"
                    },
                    loading: "メディアを読み込んでいます...",
                    media_still_converting: "現在メディアを変換しています。しばらくしてからもう一度試してください。",
                    messages: {
                        file_failed_to_load: "このメディア ファイルの読み込みに失敗しました",
                        flash_required_record_audio: "オーディオを録音するには Flash が必要です。",
                        flash_required_upload_audio: "オーディオをアップロードするには Flash が必要です。",
                        flash_required_upload_video: "ビデオをアップロードするには Flash が必要です。",
                        loading: "読み込んでいます...",
                        submitted: "メディア ファイルが提出されました!",
                        submitting: "メディア ファイルを提出しています..."
                    },
                    titles: {
                        media_contribution: "メディア投稿",
                        play_comment: "メディア コメントの再生",
                        record_upload_media_comment: "メディア コメントの記録/アップロード"
                    },
                    track_uploaded_successfully: "トラックは正常にアップロードされました。表示するには更新してください。",
                    upload: "アップロード",
                    uploading: "アップロードしています..."
                }
            },
            ko: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "이 Canvas 사이트에는 Kaltura 사용 안 함"
                    },
                    buttons: {
                        submit: "미디어 파일 제출"
                    },
                    cancel: "취소",
                    click_to_view: "보려면 클릭",
                    errors: {
                        file_too_large: "*파일이 너무 큽니다.* 최대 크기는 %{size}MB입니다.",
                        load_failed: "미디어 설명 응용 프로그램을 로드하는 데 실패했습니다. 다시 시도하시기 바랍니다.",
                        must_be_logged_in: "미디어를 녹음/녹화하려면 로그인해야 합니다.",
                        persistent_problem: "이 문제가 계속 발생하면 미디어를 로컬에서 녹음/녹화하고 저장된 파일을 업로드하는 방법을 대신 시도해 볼 수 있습니다.",
                        save_failed: "저장에 실패한 것 같습니다. 이 팝업을 닫고 다시 시도하시기 바랍니다.",
                        save_failed_try_again: "항목을 저장하는 데 실패했습니다. 다시 시도하시기 바랍니다.",
                        upload_failed: "다음 오류로 업로드 실패:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "포함된 내용 최소화"
                    },
                    loading: "미디어 로드 중...",
                    media_still_converting: "현재 미디어를 변환 중입니다. 잠시 후에 다시 시도하시기 바랍니다.",
                    messages: {
                        file_failed_to_load: "미디어 파일 로드 실패",
                        flash_required_record_audio: "음성을 녹음하려면 Flash가 필요합니다.",
                        flash_required_upload_audio: "음성을 업로드하려면 Flash가 필요합니다.",
                        flash_required_upload_video: "비디오를 업로드하려면 Flash가 필요합니다.",
                        loading: "로드 중...",
                        submitted: "미디어 파일 제출함",
                        submitting: "미디어 파일 제출 중..."
                    },
                    titles: {
                        media_contribution: "미디어 기여",
                        play_comment: "미디어 설명 재생",
                        record_upload_media_comment: "미디어 설명 녹음/녹화/업로드"
                    },
                    track_uploaded_successfully: "트랙 업로드에 성공했습니다. 확인하려면 새로 고치십시오.",
                    upload: "업로드",
                    uploading: "업로드 중..."
                }
            },
            "ko-kr": {},
            nl: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "Kaltura is niet geactiveerd voor deze Canvas-site"
                    },
                    buttons: {
                        submit: "Verstuur mediabestand"
                    },
                    cancel: "Annuleren",
                    click_to_view: "Klik om te bekijke",
                    errors: {
                        file_too_large: "*Dit bestand is te groot.* De maximale grootte is %{size} MB",
                        load_failed: "Kon het programma Mediareacties niet laden. Probeer het opnieuw.",
                        media_comment_installation_broken: "De functie voor het uploaden van reacties is niet correct ingesteld. Neem contact op met uw beheerder.",
                        must_be_logged_in: "U moet ingelogd zijn om media op te nemen.",
                        persistent_problem: "Als het probleem blijft bestaan, neem media dan lokaal op en upload het opgeslagen bestand.",
                        save_failed: "Opslaan is mislukt. Sluit de pop-up en probeer het opnieuw.",
                        save_failed_try_again: "Kan invoer niet opslaan. Probeer het opnieuw.",
                        upload_failed: "Uploaden mislukt met de volgende fout:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Minimaliseer ingesloten inhoud"
                    },
                    loading: "Media wordt geladen..",
                    media_still_converting: "Media wordt momenteel geconverteerd, probeer het later opnieuw.",
                    messages: {
                        file_failed_to_load: "Kan het mediabestand niet laden",
                        flash_required_record_audio: "U hebt ondersteuning voor Flash nodig om geluid op te nemen.",
                        flash_required_upload_audio: "U hebt Flash nodig om geluid te uploaden.",
                        flash_required_upload_video: "U hebt Flash nodig om video te uploaden.",
                        loading: "Laden...",
                        submitted: "Mediabestand is verstuurd!",
                        submitting: "Mediabestand wordt verstuurd.."
                    },
                    titles: {
                        media_contribution: "Mediabijdrage",
                        play_comment: "Speel mediareactie af",
                        record_upload_media_comment: "Mediareactie opnemen/uploaden"
                    },
                    track_uploaded_successfully: "Track is geüpload. Ververs de pagina om te bekijken.",
                    upload: "Uploaden",
                    uploading: "Bezig met uploaden..."
                }
            },
            pl: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "Platforma Kaltura została wyłączona dla tej witryny Canvas"
                    },
                    buttons: {
                        submit: "Prześlij plik multimedialny"
                    },
                    cancel: "Anuluj",
                    click_to_view: "Kliknij, aby wyświetlić",
                    errors: {
                        file_too_large: "*Ten plik jest za duży.* Maksymalny rozmiar pliku to %{size} MB.",
                        load_failed: "Ładowanie aplikacji do tworzenia komentarzy multimedialnych nie powiodło się.  Spróbuj ponownie.",
                        media_comment_installation_broken: "Przekazywanie komentarzy multimedialnych nie zostało prawidłowo ustawione. Proszę skontaktować się z administratorem.",
                        must_be_logged_in: "W celu nagrania zawartości multimedialnej należy się zalogować.",
                        persistent_problem: "Jeżeli problem będzie się powtarzał, można nagrać zawartość multimedialną lokalnie, a następnie przekazać zapisany plik.",
                        save_failed: "Zapisywanie nie powiodło się.  Zamknij to okno i spróbuj ponownie.",
                        save_failed_try_again: "Zapisywanie wprowadzonych danych nie powiodło się.  Spróbuj ponownie.",
                        upload_failed: "Przekazywanie nie powiodło się z powodu błędu:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Minimalizuj zawartość osadzoną"
                    },
                    loading: "Trwa ładowanie multimediów...",
                    media_still_converting: "Multimedia są teraz przetwarzane, spróbuj nieco później.",
                    messages: {
                        file_failed_to_load: "Ładowanie pliku multimedialnego nie powiodło się",
                        flash_required_record_audio: "Do nagrywania dźwięku wymagana jest wtyczka Flash.",
                        flash_required_upload_audio: "Do przekazania dźwięku wymagana jest wtyczka Flash.",
                        flash_required_upload_video: "Do przekazania nagrania wideo wymagana jest wtyczka Flash.",
                        loading: "Trwa ładowanie...",
                        submitted: "Plik multimedialny został przesłany!",
                        submitting: "Trwa przesyłanie pliku multimedialnego..."
                    },
                    titles: {
                        media_contribution: "Udział multimediów",
                        play_comment: "Odtwórz komentarz multimedialny",
                        record_upload_media_comment: "Nagraj/przekaż komentarz multimedialny"
                    },
                    track_uploaded_successfully: "Aktualizacja ścieżki zakończona pomyślnie; odśwież, aby zobaczyć.",
                    upload: "Przekaż",
                    uploading: "Trwa przekazywanie..."
                }
            },
            pt: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "O Kaltura foi desativado para este site Canvas"
                    },
                    buttons: {
                        submit: "Enviar arquivo de mídia"
                    },
                    cancel: "Cancelar",
                    click_to_view: "Clicar para ver",
                    errors: {
                        file_too_large: "*Este arquivo é muito grande.* O tamanho máximo é %{size}MB.",
                        load_failed: "Falha no carregamento do aplicativo de comentário de mídia.  Tente novamente.",
                        media_comment_installation_broken: "O carregamento do comentário multimédia não foi configurado corretamente. Contacte o administrador.",
                        must_be_logged_in: "Tem de ter sessão iniciada para gravar multimédia.",
                        persistent_problem: "Se este problema persistir, talvez será necessário tentar gravar sua mídia localmente e depois fazer o upload do arquivo salvo.",
                        save_failed: "Parece ter havido uma falha ao guardar.  Feche este pop-up e tente novamente.",
                        save_failed_try_again: "Falha ao guardar entrada.  Tente novamente.",
                        upload_failed: "Falha no upload com erro:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Minimizar conteúdo incorporado"
                    },
                    loading: "A carregar suportes...",
                    media_still_converting: "Os suportes estão a ser convertidos, tente novamente dentro de alguns momentos.",
                    messages: {
                        file_failed_to_load: "Falha ao carregar este arquivo de mídia",
                        flash_required_record_audio: "É necessário Flash para gravar áudio.",
                        flash_required_upload_audio: "É necessário Flash para fazer upload do áudio.",
                        flash_required_upload_video: "É necessário Flash para fazer upload do vídeo.",
                        loading: "Carregando...",
                        submitted: "Arquivo de mídia enviado!",
                        submitting: "Enviando arquivo de mídia..."
                    },
                    titles: {
                        media_contribution: "Contribuição de mídia",
                        play_comment: "Reproduzir comentário em mídia",
                        record_upload_media_comment: "Gravação/Upload de comentário em mídia"
                    },
                    track_uploaded_successfully: "Faixa carregada com sucesso, atualizar para ver.",
                    upload: "Carregar",
                    uploading: "A carregar..."
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "Kaltura отключено для этого сайта Canvas"
                    },
                    buttons: {
                        submit: "Отправить файл мультимедиа"
                    },
                    cancel: "Отменить",
                    click_to_view: "Щелкните, чтобы просмотреть",
                    errors: {
                        file_too_large: "*Этот файл слишком большой.* Максимальный размер — %{size} Мбайт.",
                        load_failed: "Ошибка загрузка приложения мультимедийных комментариев.  Повторите попытку.",
                        media_comment_installation_broken: "Загрузка мультимедийного комментария не была настроена должным образом. Пожалуйста, свяжитесь со своим администратором.",
                        must_be_logged_in: "Для записи мультимедиа необходимо войти в систему.",
                        persistent_problem: "Если эту проблему не удается устранить, можно попробовать записать мультимедиа локально, затем обновить сохраненный файл.",
                        save_failed: "По-видимому, произошел сбой сохранения.  Закройте это всплывающее окно и повторите попытку.",
                        save_failed_try_again: "Ошибка сохранения записи. Повторите попытку.",
                        upload_failed: "Произошла следующая ошибка обновления:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "Свернуть встроенное содержимое"
                    },
                    loading: "Загрузка данных...",
                    media_still_converting: "Данные в настоящий момент конвертируются, попробуйте позже.",
                    messages: {
                        file_failed_to_load: "Ошибка загрузки этого файла мультимедиа",
                        flash_required_record_audio: "Для записи звука требуется Flash.",
                        flash_required_upload_audio: "Для загрузки звука требуется Flash.",
                        flash_required_upload_video: "Для загрузки видео требуется Flash.",
                        loading: "Загрузка...",
                        submitted: "Файл мультимедиа отправлен!",
                        submitting: "Отправка файла мультимедиа..."
                    },
                    titles: {
                        media_contribution: "Вклад мультимедиа",
                        play_comment: "Воспроизведение мультимедийного комментария",
                        record_upload_media_comment: "Запись/загрузка мультимедийного комментария"
                    },
                    track_uploaded_successfully: "Запись загружена успешно, нажмите «обновить», чтобы просмотреть.",
                    upload: "Загрузить",
                    uploading: "Загрузка..."
                }
            },
            "tr-tr": {},
            zh: {
                media_comments: {
                    alerts: {
                        kaltura_disabled: "此 Canvas 网站已禁用 Kaltura"
                    },
                    buttons: {
                        submit: "提交媒体文件"
                    },
                    cancel: "取消",
                    click_to_view: "单击以查看",
                    errors: {
                        file_too_large: "*此文件太大。*最大大小为 %{size}MB。",
                        load_failed: "媒体评论应用程序无法加载。请重试。",
                        media_comment_installation_broken: "媒体评论上传尚未正确设置。请联系您的管理员。",
                        must_be_logged_in: "您必须登录才能录制媒体。",
                        persistent_problem: "如果一直出现此问题，您可能会想要尝试在本地录制媒体然后上传保存的文件代替。",
                        save_failed: "保存似乎失败。请关闭此弹出窗口以重试。",
                        save_failed_try_again: "条目无法保存。请重试。",
                        upload_failed: "上传失败，错误:"
                    },
                    links: {
                        minimize_embedded_kaltura_content: "最小化嵌入的内容"
                    },
                    loading: "正在加载媒体...",
                    media_still_converting: "目前正在转换媒体，请稍后重试。",
                    messages: {
                        file_failed_to_load: "此媒体文件无法加载",
                        flash_required_record_audio: "需要 Flash 才能录制音频。",
                        flash_required_upload_audio: "需要 Flash 才能上传音频。",
                        flash_required_upload_video: "需要 Flash 才能上传视频。",
                        loading: "正在加载...",
                        submitted: "已提交媒体文件！",
                        submitting: "正在提交媒体文件..."
                    },
                    titles: {
                        media_contribution: "媒体参与",
                        play_comment: "播放媒体评论",
                        record_upload_media_comment: "录制/上传媒体评论"
                    },
                    track_uploaded_successfully: "轨道已成功上载，刷新即可看到。",
                    upload: "上传",
                    uploading: "正在上传..."
                }
            },
            "zh-hans": {}
        }
    })
}), function () {
    define("compiled/jquery/mediaCommentThumbnail", ["i18n!media_comments", "underscore", "str/htmlEscape", "jquery"], function (a, b, c, d) {
        var e, f;
        return e = {
            normal: {
                width: 140,
                height: 100
            },
            small: {
                width: 70,
                height: 50
            }
        }, f = function (b, f, g) {
            var h, i, j, k, l, m, n, o, p, q;
            if (!INST.kalturaSettings) return console.log("Kaltura has not been enabled for this account");
            j = d(b), m = (q = e[f]) != null ? q : e.normal, o = j.data("media_comment_id") || d.trim(j.find(".media_comment_id:first").text()) || (p = j.attr("id")) && p.match(/^media_comment_/) && p.substring(14) || d.trim(j.parent().find(".media_comment_id:first").text());
            if (o) return n = "https://" + INST.kalturaSettings.resource_domain, l = "" + n + "/p/" + INST.kalturaSettings.partner_id + "/thumbnail/entry_id/" + o + "/width/" + ("" + m.width + "/height/" + m.height + "/bgcolor/000000/type/2/vid_sec/5"), k = d("<span                        style='background-image: url(" + l + ");'                        class='media_comment_thumbnail media_comment_thumbnail-" + f + "'                      >                        <span class='media_comment_thumbnail_play_button'>                          " + c(a.t("click_to_view", "Click to view")) + "                        </span>                      </span>"), h = j, g ? (h = j.clone().empty().removeClass("instructure_file_link"), i = j.parent(".instructure_file_link_holder"), i.length ? h.appendTo(i) : j.after(h)) : j.empty(), h.addClass("instructure_inline_media_comment").append(k).css({
                backgroundImage: "",
                padding: 0
            })
        }, d.fn.mediaCommentThumbnail = function (a, c) {
            return a == null && (a = "normal"), this.each(function () {
                return b.defer(f, this, a, c)
            })
        }
    })
}.call(this), define("jqueryui/accordion", ["jquery", "jqueryui/core", "jqueryui/widget"], function (a) {
    var b = a,
        c = 0,
        d = {},
        e = {},
        f = {};
    d.height = d.paddingTop = d.paddingBottom = d.borderTopWidth = d.borderBottomWidth = "hide", e.height = e.paddingTop = e.paddingBottom = e.borderTopWidth = e.borderBottomWidth = "show", a.extend(f, e, {
        accordionHeight: "show"
    }), a.fx.step.accordionHeight = function (b) {
        var c = a(b.elem),
            d = c.data("ui-accordion-height");
        c.height(d.total - c.outerHeight() - d.toHide.outerHeight() + c.height())
    }, a.widget("ui.accordion", {
        version: "@VERSION",
        options: {
            active: 0,
            animate: {},
            collapsible: !1,
            event: "click",
            header: "> li > :first-child,> :not(li):even",
            heightStyle: "auto",
            icons: {
                activeHeader: "ui-icon-triangle-1-s",
                header: "ui-icon-triangle-1-e"
            },
            activate: null,
            beforeActivate: null
        },
        _create: function () {
            var b = this.accordionId = "ui-accordion-" + (this.element.attr("id") || ++c),
                d = this.options;
            this.prevShow = this.prevHide = a(), this.element.addClass("ui-accordion ui-widget ui-helper-reset"), this.headers = this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"), this._hoverable(this.headers), this._focusable(this.headers), this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").hide(), !d.collapsible && d.active === !1 && (d.active = 0), d.active < 0 && (d.active += this.headers.length), this.active = this._findActive(d.active).addClass("ui-accordion-header-active ui-state-active").toggleClass("ui-corner-all ui-corner-top"), this.active.next().addClass("ui-accordion-content-active").show(), this._createIcons(), this.originalHeight = this.element[0].style.height, this.refresh(), this.element.attr("role", "tablist"), this.headers.attr("role", "tab").each(function (c) {
                var d = a(this),
                    e = d.attr("id"),
                    f = d.next(),
                    g = f.attr("id");
                e || (e = b + "-header-" + c, d.attr("id", e)), g || (g = b + "-panel-" + c, f.attr("id", g)), d.attr("aria-controls", g), f.attr("aria-labelledby", e)
            }).next().attr("role", "tabpanel"), this.headers.not(this.active).attr({
                "aria-selected": "false",
                tabIndex: -1
            }).next().attr({
                "aria-expanded": "false",
                "aria-hidden": "true"
            }).hide(), this.active.length ? this.active.attr({
                "aria-selected": "true",
                tabIndex: 0
            }).next().attr({
                "aria-expanded": "true",
                "aria-hidden": "false"
            }) : this.headers.eq(0).attr("tabIndex", 0), this._on(this.headers, {
                keydown: "_keydown"
            }), this._on(this.headers.next(), {
                keydown: "_panelKeyDown"
            }), this._setupEvents(d.event)
        },
        _getCreateEventData: function () {
            return {
                header: this.active,
                content: this.active.length ? this.active.next() : a()
            }
        },
        _createIcons: function () {
            var b = this.options.icons;
            b && (a("<span>").addClass("ui-accordion-header-icon ui-icon " + b.header).prependTo(this.headers), this.active.children(".ui-accordion-header-icon").removeClass(b.header).addClass(b.activeHeader), this.headers.addClass("ui-accordion-icons"))
        },
        _destroyIcons: function () {
            this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()
        },
        _destroy: function () {
            var a;
            this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"), this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function () {
                /^ui-accordion/.test(this.id) && this.removeAttribute("id")
            }), this._destroyIcons(), a = this.headers.next().css("display", "").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function () {
                /^ui-accordion/.test(this.id) && this.removeAttribute("id")
            }), this.options.heightStyle !== "content" && (this.element.css("height", this.originalHeight), a.css("height", ""))
        },
        _setOption: function (a, b) {
            if (a === "active") {
                this._activate(b);
                return
            }
            a === "event" && (this.options.event && this._off(this.headers, this.options.event), this._setupEvents(b)), this._super(a, b), a === "collapsible" && !b && this.options.active === !1 && this._activate(0), a === "icons" && (this._destroyIcons(), b && this._createIcons()), a === "disabled" && this.headers.add(this.headers.next()).toggleClass("ui-state-disabled", !! b)
        },
        _keydown: function (b) {
            if (b.altKey || b.ctrlKey) return;
            var c = a.ui.keyCode,
                d = this.headers.length,
                e = this.headers.index(b.target),
                f = !1;
            switch (b.keyCode) {
            case c.RIGHT:
            case c.DOWN:
                f = this.headers[(e + 1) % d];
                break;
            case c.LEFT:
            case c.UP:
                f = this.headers[(e - 1 + d) % d];
                break;
            case c.SPACE:
            case c.ENTER:
                this._eventHandler(b);
                break;
            case c.HOME:
                f = this.headers[0];
                break;
            case c.END:
                f = this.headers[d - 1]
            }
            f && (a(b.target).attr("tabIndex", -1), a(f).attr("tabIndex", 0), f.focus(), b.preventDefault())
        },
        _panelKeyDown: function (b) {
            b.keyCode === a.ui.keyCode.UP && b.ctrlKey && a(b.currentTarget).prev().focus()
        },
        refresh: function () {
            var b, c, d = this.options.heightStyle,
                e = this.element.parent();
            this.element.css("height", this.originalHeight), d === "fill" ? (a.support.minHeight || (c = e.css("overflow"), e.css("overflow", "hidden")), b = e.height(), this.element.siblings(":visible").each(function () {
                var c = a(this),
                    d = c.css("position");
                if (d === "absolute" || d === "fixed") return;
                b -= c.outerHeight(!0)
            }), c && e.css("overflow", c), this.headers.each(function () {
                b -= a(this).outerHeight(!0)
            }), this.headers.next().each(function () {
                a(this).height(Math.max(0, b - a(this).innerHeight() + a(this).height()))
            }).css("overflow", "auto")) : d === "auto" && (b = 0, this.headers.next().each(function () {
                b = Math.max(b, a(this).height("").height())
            }).height(b)), d !== "content" && this.element.height(this.element.height())
        },
        _activate: function (b) {
            var c = this._findActive(b)[0];
            if (c === this.active[0]) return;
            c = c || this.active[0], this._eventHandler({
                target: c,
                currentTarget: c,
                preventDefault: a.noop
            })
        },
        _findActive: function (b) {
            return typeof b == "number" ? this.headers.eq(b) : a()
        },
        _setupEvents: function (b) {
            var c = {};
            if (!b) return;
            a.each(b.split(" "), function (a, b) {
                c[b] = "_eventHandler"
            }), this._on(this.headers, c)
        },
        _eventHandler: function (b) {
            var c = this.options,
                d = this.active,
                e = a(b.currentTarget),
                f = e[0] === d[0],
                g = f && c.collapsible,
                h = g ? a() : e.next(),
                i = d.next(),
                j = {
                    oldHeader: d,
                    oldPanel: i,
                    newHeader: g ? a() : e,
                    newPanel: h
                };
            b.preventDefault();
            if (f && !c.collapsible || this._trigger("beforeActivate", b, j) === !1) return;
            c.active = g ? !1 : this.headers.index(e), this.active = f ? a() : e, this._toggle(j), d.removeClass("ui-accordion-header-active ui-state-active"), c.icons && d.children(".ui-accordion-header-icon").removeClass(c.icons.activeHeader).addClass(c.icons.header), f || (e.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"), c.icons && e.children(".ui-accordion-header-icon").removeClass(c.icons.header).addClass(c.icons.activeHeader), e.next().addClass("ui-accordion-content-active"))
        },
        _toggle: function (b) {
            var c = b.newPanel,
                d = this.prevShow.length ? this.prevShow : b.oldPanel;
            this.prevShow.add(this.prevHide).stop(!0, !0), this.prevShow = c, this.prevHide = d, this.options.animate ? this._animate(c, d, b) : (d.hide(), c.show(), this._toggleComplete(b)), d.attr({
                "aria-expanded": "false",
                "aria-hidden": "true"
            }), d.prev().attr("aria-selected", "false"), c.length && d.length ? d.prev().attr("tabIndex", -1) : c.length && this.headers.filter(function () {
                return a(this).attr("tabIndex") === 0
            }).attr("tabIndex", -1), c.attr({
                "aria-expanded": "true",
                "aria-hidden": "false"
            }).prev().attr({
                "aria-selected": "true",
                tabIndex: 0
            })
        },
        _animate: function (a, b, c) {
            var g, h, i, j = this,
                k = a.length && (!b.length || a.index() < b.index()),
                l = this.options.animate || {},
                m = k && l.down || l,
                n = function () {
                    a.removeData("ui-accordion-height"), j._toggleComplete(c)
                };
            typeof m == "number" && (i = m), typeof m == "string" && (h = m), h = h || m.easing || l.easing, i = i || m.duration || l.duration;
            if (!b.length) return a.animate(e, i, h, n);
            if (!a.length) return b.animate(d, i, h, n);
            g = a.show().outerHeight(), b.animate(d, i, h), a.hide().data("ui-accordion-height", {
                total: g,
                toHide: b
            }).animate(this.options.heightStyle === "content" ? e : f, i, h, n)
        },
        _toggleComplete: function (a) {
            var b = a.oldPanel;
            b.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"), b.length && (b.parent()[0].className = b.parent()[0].className), this._trigger("activate", null, a)
        }
    }), a.uiBackCompat !== !1 && (function (a, b) {
        a.extend(b.options, {
            navigation: !1,
            navigationFilter: function () {
                return this.href.toLowerCase() === location.href.toLowerCase()
            }
        });
        var c = b._create;
        b._create = function () {
            if (this.options.navigation) {
                var b = this,
                    d = this.element.find(this.options.header),
                    e = d.next(),
                    f = d.add(e).find("a").filter(this.options.navigationFilter)[0];
                f && d.add(e).each(function (c) {
                    if (a.contains(this, f)) return b.options.active = Math.floor(c / 2), !1
                })
            }
            c.call(this)
        }
    }(b, b.ui.accordion.prototype), function (a, b) {
        a.extend(b.options, {
            heightStyle: null,
            autoHeight: !0,
            clearStyle: !1,
            fillSpace: !1
        });
        var c = b._create,
            d = b._setOption;
        a.extend(b, {
            _create: function () {
                this.options.heightStyle = this.options.heightStyle || this._mergeHeightStyle(), c.call(this)
            },
            _setOption: function (a, b) {
                if (a === "autoHeight" || a === "clearStyle" || a === "fillSpace") this.options.heightStyle = this._mergeHeightStyle();
                d.apply(this, arguments)
            },
            _mergeHeightStyle: function () {
                var a = this.options;
                if (a.fillSpace) return "fill";
                if (a.clearStyle) return "content";
                if (a.autoHeight) return "auto"
            }
        })
    }(b, b.ui.accordion.prototype), function (a, b) {
        a.extend(b.options.icons, {
            activeHeader: null,
            headerSelected: "ui-icon-triangle-1-s"
        });
        var c = b._createIcons;
        b._createIcons = function () {
            this.options.icons && (this.options.icons.activeHeader = this.options.icons.activeHeader || this.options.icons.headerSelected), c.call(this)
        }
    }(b, b.ui.accordion.prototype), function (a, b) {
        b.activate = b._activate;
        var c = b._findActive;
        b._findActive = function (a) {
            return a === -1 && (a = !1), a && typeof a != "number" && (a = this.headers.index(this.headers.filter(a)), a === -1 && (a = !1)), c.call(this, a)
        }
    }(b, b.ui.accordion.prototype), b.ui.accordion.prototype.resize = b.ui.accordion.prototype.refresh, function (a, b) {
        a.extend(b.options, {
            change: null,
            changestart: null
        });
        var c = b._trigger;
        b._trigger = function (a, b, d) {
            var e = c.apply(this, arguments);
            return e ? (a === "beforeActivate" ? e = c.call(this, "changestart", b, {
                oldHeader: d.oldHeader,
                oldContent: d.oldPanel,
                newHeader: d.newHeader,
                newContent: d.newPanel
            }) : a === "activate" && (e = c.call(this, "change", b, {
                oldHeader: d.oldHeader,
                oldContent: d.oldPanel,
                newHeader: d.newHeader,
                newContent: d.newPanel
            })), e) : !1
        }
    }(b, b.ui.accordion.prototype), function (a, b) {
        a.extend(b.options, {
            animate: null,
            animated: "slide"
        });
        var c = b._create;
        b._create = function () {
            var a = this.options;
            a.animate === null && (a.animated ? a.animated === "slide" ? a.animate = 300 : a.animated === "bounceslide" ? a.animate = {
                duration: 200,
                down: {
                    easing: "easeOutBounce",
                    duration: 1e3
                }
            } : a.animate = a.animated : a.animate = !1), c.call(this)
        }
    }(b, b.ui.accordion.prototype))
}), function () {
    define("compiled/behaviors/trackEvent", ["jquery", "jquery.google-analytics"], function (a) {
        return a("body").on("click", "[data-track-category]", function (b) {
            var c, d, e, f, g;
            return g = a(this).data(), d = g.trackCategory, e = g.trackLabel, c = g.trackAction, f = g.trackValue, a.trackEvent(d, c, e, f), null
        })
    })
}.call(this), define("vendor/jquery.placeholder", ["jquery"], function (a) {
    function b(b) {
        this.input = b, b.attr("type") == "password" && this.handlePassword(), a(b[0].form).submit(function () {
            b.hasClass("placeholder") && b[0].value == b.attr("placeholder") && (b[0].value = "")
        })
    }
    b.prototype = {
        show: function (a) {
            if (this.input[0].value === "" || a && this.valueIsPlaceholder()) {
                if (this.isPassword) try {
                    this.input[0].setAttribute("type", "text")
                } catch (b) {
                    this.input.before(this.fakePassword.show()).hide()
                }
                this.input.addClass("placeholder"), this.input[0].value = this.input.attr("placeholder")
            }
        },
        hide: function () {
            if (this.valueIsPlaceholder() && this.input.hasClass("placeholder")) {
                this.input.removeClass("placeholder"), this.input[0].value = "";
                if (this.isPassword) {
                    try {
                        this.input[0].setAttribute("type", "password")
                    } catch (a) {}
                    this.input.show(), this.input[0].focus()
                }
            }
        },
        valueIsPlaceholder: function () {
            return this.input[0].value == this.input.attr("placeholder")
        },
        handlePassword: function () {
            var b = this.input;
            b.attr("realType", "password"), this.isPassword = !0;
            if (a.browser.msie && b[0].outerHTML) {
                var c = a(b[0].outerHTML.replace(/type=(['"])?password\1/gi, "type=$1text$1"));
                this.fakePassword = c.val(b.attr("placeholder")).addClass("placeholder").focus(function () {
                    b.trigger("focus"), a(this).hide()
                }), a(b[0].form).submit(function () {
                    c.remove(), b.show()
                })
            }
        }
    };
    var c = "placeholder" in document.createElement("input");
    a.fn.placeholder = function () {
        return c ? this : this.each(function () {
            var c = a(this),
                d = new b(c);
            d.show(!0), c.focus(function () {
                d.hide()
            }), c.blur(function () {
                d.show(!1)
            }), a.browser.msie && (a(window).load(function () {
                c.val() && c.removeClass("placeholder"), d.show(!0)
            }), c.focus(function () {
                if (this.value == "") {
                    var a = this.createTextRange();
                    a.collapse(!0), a.moveStart("character", 0), a.select()
                }
            }))
        })
    }
}), define("translations/ajax_errors", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                ajax_errors: {
                    error_heading: "خطأ Ajax: %{status_code}",
                    errors: {
                        connection_lost: "تم فقد الاتصال بـ %{host}.  يُرجى التأكد من اتصالك بالإنترنت وحاول من جديد.",
                        timeout: "حدثت مشكلة مع الطلب الخاص بك، قد يكون نظرًا للخمول لفترة طويلة.  الرجاء إعادة تحميل الصفحة والمحاولة مرة أخرى.",
                        unhandled: "للأسف! لم يعمل الطلب الأخير."
                    },
                    links: {
                        details: "تفاصيل..."
                    },
                    no_text: "بدون نص"
                }
            },
            de: {
                ajax_errors: {
                    error_heading: "Ajax-fehler: %{status_code}",
                    errors: {
                        connection_lost: "Die Verbindung mit %{host} ist abgebrochen.  Vergewissern Sie sich, dass Ihre Internetverbindung funktioniert, und versuchen Sie es erneut.",
                        timeout: "Bei Ihrer Anfrage ist ein Problem aufgetreten, möglicherweise aufgrund einer zu langen Periode der Inaktivität.  Bitte laden Sie die Seite erneut und versuchen Sie es ein weiteres Mal.",
                        unhandled: "Hoppla! Die letzte Anfrage war nicht erfolgreich."
                    },
                    links: {
                        details: "Details..."
                    },
                    no_text: "Kein Text"
                }
            },
            "el-gr": {},
            "en-AU": {
                ajax_errors: {
                    error_heading: "Ajax Error: %{status_code}",
                    errors: {
                        connection_lost: "Connection to %{host} was lost.  Please make sure you're connected to the Internet and try again.",
                        timeout: "There was a problem with your request, possibly due to a long period of inactivity.  Please reload the page and try again.",
                        unhandled: "Oops! The last request didn't work out."
                    },
                    links: {
                        details: "details..."
                    },
                    no_text: "No text"
                }
            },
            "en-GB": {
                ajax_errors: {
                    error_heading: "Ajax Error: %{status_code}",
                    errors: {
                        connection_lost: "Connection to %{host} was lost.  Please make sure you're connected to the internet and try again.",
                        timeout: "There was a problem with your request, possibly due to a long period of inactivity.  Please reload the page and try again.",
                        unhandled: "Oops! The last request didn't work out."
                    },
                    links: {
                        details: "details..."
                    },
                    no_text: "No text"
                }
            },
            es: {
                ajax_errors: {
                    error_heading: "Error Ajax: %{status_code}",
                    errors: {
                        connection_lost: "La conexión a %{host} se perdió. Por favor asegúrese que está conectado al internet e intente de nuevo.",
                        timeout: "Ocurrió un problema con su solicitud, posiblemente por un largo período de inactividad. Por favor recargue la página e intente de nuevo.",
                        unhandled: "¡Oops! La última solicitud no funcionó."
                    },
                    links: {
                        details: "detalles..."
                    },
                    no_text: "Sin texto"
                }
            },
            fr: {
                ajax_errors: {
                    error_heading: "Erreur Ajax : %{status_code}",
                    errors: {
                        connection_lost: "La connexion à %{host} a été perdue. Assurez-vous que vous êtes connecté à l’Internet puis réessayez.",
                        timeout: "Un problème s’est produit avec votre demande, probablement en raison d’une longue période d’inactivité. Veuillez retélécharger la page et réessayer.",
                        unhandled: "Erreur. Votre dernière demande n’a pas fonctionné."
                    },
                    links: {
                        details: "informations..."
                    },
                    no_text: "Aucun texte"
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                ajax_errors: {
                    error_heading: "Ajax エラー: %{status_code}",
                    errors: {
                        connection_lost: "%{host} への接続が失われました。インターネットに接続していることを確認してから、もう一度試してください。",
                        timeout: "要求に問題がありました。おそらく非活動期間が長かったことが原因です。ページを再読み込みしてから、もう一度試してください。",
                        unhandled: "問題が発生しました!前回の要求は失敗しています。"
                    },
                    links: {
                        details: "詳細..."
                    },
                    no_text: "テキストはありません"
                }
            },
            ko: {
                ajax_errors: {
                    error_heading: "Ajax 오류: %{status_code}",
                    errors: {
                        connection_lost: "%{host}와의 연결이 끊어졌습니다. 인터넷에 연결되어 있는지 확인하고 다시 시도하시기 바랍니다.",
                        timeout: "오랫동안 사용하지 않아서 요청에 문제가 발생했습니다. 페이지를 다시 로드하고 다시 시도하시기 바랍니다.",
                        unhandled: "마지막 요청이 동작하지 않았습니다."
                    },
                    links: {
                        details: "세부 정보"
                    },
                    no_text: "텍스트 없음"
                }
            },
            "ko-kr": {},
            nl: {
                ajax_errors: {
                    error_heading: "Ajax-fout: %{status_code}",
                    errors: {
                        connection_lost: "Verbinding met %{host} is verbroken. Controleer of er verbinding is met internet en probeer het opnieuw.",
                        timeout: "Er is een probleem opgetreden met uw verzoek, mogelijk omdat de sessie is verlopen. Laad de pagina opnieuw en probeer het opnieuw.",
                        unhandled: "Het laatste verzoek is mislukt."
                    },
                    links: {
                        details: "details..."
                    },
                    no_text: "Geen tekst"
                }
            },
            pl: {
                ajax_errors: {
                    error_heading: "Błąd programu Ajax: %{status_code}",
                    errors: {
                        connection_lost: "Utracono połączenie z %{host}.  Sprawdź połączenie z Internetem i spróbuj ponownie.",
                        timeout: "Wystąpił problem z realizację żądania. Prawdopodobną przyczyną jest zbyt długi czas nieaktywności.  Ponownie załaduj stronę i spróbuj jeszcze raz.",
                        unhandled: "Niestety! Ostatnie żądanie nie zostało zrealizowane."
                    },
                    links: {
                        details: "informacje szczegółowe..."
                    },
                    no_text: "Brak tekstu"
                }
            },
            pt: {
                ajax_errors: {
                    error_heading: "Erro Ajax: %{status_code}",
                    errors: {
                        connection_lost: "A ligação a %{host} foi perdida.  Verifique se está ligado à Internet e tente novamente.",
                        timeout: "Houve um problema com sua solicitação, possivelmente devido a um longo período de inatividade.  Carregue novamente a página e tente novamente.",
                        unhandled: "Oops! A última solicitação não funcionou."
                    },
                    links: {
                        details: "detalhes..."
                    },
                    no_text: "Nenhum texto"
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                ajax_errors: {
                    error_heading: "Ошибка Ajax: %{status_code}",
                    errors: {
                        connection_lost: "Подключение к %{host} было потеряно.  Убедитесь, что вы подключены к Интернету, и повторите попытку.",
                        timeout: "Ошибка запроса, возможно из-за длительного бездействия.  Перезагрузите страницу и повторите попытку.",
                        unhandled: "Ой! Последний запрос не сработал."
                    },
                    links: {
                        details: "сведения..."
                    },
                    no_text: "Нет текста"
                }
            },
            "tr-tr": {},
            zh: {
                ajax_errors: {
                    error_heading: "Ajax 错误: %{status_code}",
                    errors: {
                        connection_lost: "到 %{host} 的连接丢失。请确保已连接到 Internet，然后重试。",
                        timeout: "您的请求有问题，可能是非活动时间太长所致。请重新加载页面，然后重试。",
                        unhandled: "噢！上一个请求未解决。"
                    },
                    links: {
                        details: "详细信息..."
                    },
                    no_text: "无文本"
                }
            },
            "zh-hans": {}
        }
    })
}), define("page_views", ["INST", "jquery", "jquery.ajaxJSON"], function (a, b) {
    b(document).ready(function () {
        var c = 0,
            d = b("#page_view_id"),
            e = b("#page_view_update_path").attr("href"),
            f = !1;
        a.interaction_contexts = {};
        if (document.cookie && document.cookie.match(/last_page_view/)) {
            var g = document.cookie.match(/last_page_view=([^;]+)/);
            if (g && g[1]) try {
                var h = b.parseJSON(unescape(g[1]));
                h && h.url && h.seconds && setTimeout(function () {
                    b.ajaxJSON(h.url, "PUT", {
                        interaction_seconds: h.seconds
                    }, function () {}, function () {}, 3e3)
                })
            } catch (i) {}
            document.cookie = "last_page_view=;expires=Thu, 01-Jan-1970 00:00:01 GMT"
        }
        if (d.length > 0) {
            var j = 0,
                k = 300;
            b(document).bind("page_view_id_received", function (a, c) {
                b("#page_view_id").text(c), e = "/page_views/" + c
            }), b(document).bind("page_view_update", function (a, f) {
                var g = {};
                d.hasClass("contributed") && (g.contributed = !0);
                if (f || c > 10 && j < k) g.interaction_seconds = c, b.ajaxJSON(e, "PUT", g, function (a) {
                    a && a.id && b(document).triggerHandler("page_view_id_receved", a.id)
                }, function () {}), c = 0
            }), setInterval(function () {
                b(document).triggerHandler("page_view_update")
            }, 1e3 * k), window.onbeforeunload = function () {
                if (c > 30) {
                    var a = new Date;
                    a.setDate(a.getDate() + 1);
                    var b = JSON.stringify({
                        url: e,
                        seconds: c
                    });
                    document.cookie = "last_page_view=" + escape(b)
                }
            };
            var f = !1;
            b(document).bind("mousemove keypress mousedown focus", function () {
                f = !0
            }), setInterval(function () {
                f ? (c++, a && a.interaction_context && a.interaction_contexts && (a.interaction_contexts[a.interaction_context] = (a.interaction_contexts[a.interaction_context] || 0) + 1), f = !1, j >= k && (j = 0, b(document).triggerHandler("page_view_update")), j = 0) : j++
            }, 1e3)
        }
    })
}), define("translations/license_help", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                license_help: {
                    content_license_help: "تعليمات ترخيص المحتوى"
                }
            },
            de: {
                license_help: {
                    content_license_help: "Inhaltslizenz-hilfe"
                }
            },
            "el-gr": {},
            "en-AU": {
                license_help: {
                    content_license_help: "Content Licensing Help"
                }
            },
            "en-GB": {
                license_help: {
                    content_license_help: "Content licensing help"
                }
            },
            es: {
                license_help: {
                    content_license_help: "Ayuda del Contenido para Concesión de Licencias"
                }
            },
            fr: {
                license_help: {
                    content_license_help: "Aide sur les licences de contenu"
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                license_help: {
                    content_license_help: "コンテンツ ライセンス ヘルプ"
                }
            },
            ko: {
                license_help: {
                    content_license_help: "내용 라이선싱 도움말"
                }
            },
            "ko-kr": {},
            nl: {
                license_help: {
                    content_license_help: "Help bij inhoudslicenties"
                }
            },
            pl: {
                license_help: {
                    content_license_help: "Pomoc dotycząca licencjonowania zawartości "
                }
            },
            pt: {
                license_help: {
                    content_license_help: "Ajuda de licenciamento de conteúdo"
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                license_help: {
                    content_license_help: "Помощь, связанная с лицензированием содержания"
                }
            },
            "tr-tr": {},
            zh: {
                license_help: {
                    content_license_help: "内容授权帮助"
                }
            },
            "zh-hans": {}
        }
    })
}), function () {
    define("compiled/behaviors/ujsLinks", ["jquery"], function (a) {
        var b, c, d;
        return c = function (b) {
            var c, d, e, f, g;
            return b.data("handled", !0), d = b.data("url") || b.attr("href"), f = b.data("method"), g = b.attr("target"), c = a("<form method='post' action='" + d + "'></form>"), e = "<input name='_method' value='" + f + "' type='hidden' />", ENV.AUTHENTICITY_TOKEN && (e += "<input name='authenticity_token' value='" + ENV.AUTHENTICITY_TOKEN + "' type='hidden' />"), g && c.attr("target", g), c.hide().append(e).appendTo("body").submit()
        }, b = function (a) {
            var b;
            return b = a.data("confirm"), b ? confirm(b) : !0
        }, a(document).delegate("a[data-confirm], a[data-method], a[data-remove]", "click", function (e) {
            var f;
            f = a(this);
            if (f.data("handled") || !b(f)) return !1;
            if (f.data("remove")) return d(f), !1;
            if (f.data("method")) return c(f), !1
        }), d = function (b) {
            var c, d, e, f, g, h, i;
            return g = b.data("remove"), d = b, i = b.data("url"), e = b.closest(":ui-popup").popup("option", "trigger").data("KyleMenu"), e && e.opts.appendMenuTo && (d = e.$placeholder), c = d.closest(g), c.bind({
                beforeremove: function () {
                    return c.hide()
                },
                remove: function () {
                    return c.remove()
                }
            }), c.trigger("beforeremove"), h = function () {
                return c.trigger("remove")
            }, f = function () {
                return c.show()
            }, i ? a.ajaxJSON(i, "DELETE", {}, h, f) : h()
        }
    })
}.call(this), define("jqueryui/menu", ["jquery", "jqueryui/core", "jqueryui/widget"], function (a) {
    var b = !1;
    a.widget("ui.menu", {
        version: "@VERSION",
        defaultElement: "<ul>",
        delay: 300,
        options: {
            icons: {
                submenu: "ui-icon-carat-1-e"
            },
            menus: "ul",
            position: {
                my: "left top",
                at: "right top"
            },
            role: "menu",
            blur: null,
            focus: null,
            select: null
        },
        _create: function () {
            this.activeMenu = this.element, this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons", !! this.element.find(".ui-icon").length).attr({
                role: this.options.role,
                tabIndex: 0
            }).bind("click" + this.eventNamespace, a.proxy(function (a) {
                this.options.disabled && a.preventDefault()
            }, this)), this.options.disabled && this.element.addClass("ui-state-disabled").attr("aria-disabled", "true"), this._on({
                "mousedown .ui-menu-item > a": function (a) {
                    a.preventDefault()
                },
                "click .ui-state-disabled > a": function (a) {
                    a.preventDefault()
                },
                "click .ui-menu-item:has(a)": function (c) {
                    var d = a(c.target);
                    !b && d.closest(".ui-menu-item").not(".ui-state-disabled").length && (b = !0, this.select(c), this.element.has(".ui-menu").length ? this.expand(c) : this.element.is(":focus") || this.element.focus())
                },
                "mouseenter .ui-menu-item": function (b) {
                    var c = a(b.currentTarget);
                    c.siblings().children(".ui-state-active").removeClass("ui-state-active"), this.focus(b, c)
                },
                mouseleave: "collapseAll",
                "mouseleave .ui-menu": "collapseAll",
                focus: function (a) {
                    var b = this.active || this.element.children(".ui-menu-item").eq(0);
                    this.focus(a, b)
                },
                blur: function (b) {
                    this._delay(function () {
                        a.contains(this.element[0], this.document[0].activeElement) || this.collapseAll(b)
                    })
                },
                keydown: "_keydown"
            }), this.refresh(), this._on(this.document, {
                click: function (c) {
                    a(c.target).closest(".ui-menu").length || this.collapseAll(c), b = !1
                }
            })
        },
        _destroy: function () {
            this.element.removeAttr("aria-activedescendant").find(".ui-menu").andSelf().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(), this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function () {
                var b = a(this);
                b.data("ui-menu-submenu-carat") && b.remove()
            }), this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")
        },
        _keydown: function (b) {
            function i(a) {
                return a.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
            }
            var c, d, e, f, g, h = !0;
            switch (b.keyCode) {
            case a.ui.keyCode.PAGE_UP:
                this.previousPage(b);
                break;
            case a.ui.keyCode.PAGE_DOWN:
                this.nextPage(b);
                break;
            case a.ui.keyCode.HOME:
                this._move("first", "first", b);
                break;
            case a.ui.keyCode.END:
                this._move("last", "last", b);
                break;
            case a.ui.keyCode.UP:
                this.previous(b);
                break;
            case a.ui.keyCode.DOWN:
                this.next(b);
                break;
            case a.ui.keyCode.LEFT:
                this.collapse(b);
                break;
            case a.ui.keyCode.RIGHT:
                this.active.is(".ui-state-disabled") || this.expand(b);
                break;
            case a.ui.keyCode.ENTER:
            case a.ui.keyCode.SPACE:
                this._activate(b);
                break;
            case a.ui.keyCode.ESCAPE:
                this.collapse(b);
                break;
            default:
                h = !1, d = this.previousFilter || "", e = String.fromCharCode(b.keyCode), f = !1, clearTimeout(this.filterTimer), e === d ? f = !0 : e = d + e, g = new RegExp("^" + i(e), "i"), c = this.activeMenu.children(".ui-menu-item").filter(function () {
                    return g.test(a(this).children("a").text())
                }), c = f && c.index(this.active.next()) !== -1 ? this.active.nextAll(".ui-menu-item") : c, c.length || (e = String.fromCharCode(b.keyCode), g = new RegExp("^" + i(e), "i"), c = this.activeMenu.children(".ui-menu-item").filter(function () {
                    return g.test(a(this).children("a").text())
                })), c.length ? (this.focus(b, c), c.length > 1 ? (this.previousFilter = e, this.filterTimer = this._delay(function () {
                    delete this.previousFilter
                }, 1e3)) : delete this.previousFilter) : delete this.previousFilter
            }
            h && b.preventDefault()
        },
        _activate: function (a) {
            this.active.is(".ui-state-disabled") || (this.active.children("a[aria-haspopup='true']").length ? this.expand(a) : this.select(a))
        },
        refresh: function () {
            var b, c = this.options.icons.submenu,
                d = this.element.find(this.options.menus + ":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({
                    role: this.options.role,
                    "aria-hidden": "true",
                    "aria-expanded": "false"
                });
            b = d.add(this.element), b.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role", "presentation").children("a").uniqueId().addClass("ui-corner-all").attr({
                tabIndex: -1,
                role: this._itemRole()
            }), b.children(":not(.ui-menu-item)").each(function () {
                var b = a(this);
                /[^\-—–\s]/.test(b.text()) || b.addClass("ui-widget-content ui-menu-divider")
            }), b.children(".ui-state-disabled").attr("aria-disabled", "true"), d.each(function () {
                var b = a(this),
                    d = b.prev("a"),
                    e = a("<span>").addClass("ui-menu-icon ui-icon " + c).data("ui-menu-submenu-carat", !0);
                d.attr("aria-haspopup", "true").prepend(e), b.attr("aria-labelledby", d.attr("id"))
            })
        },
        _itemRole: function () {
            return {
                menu: "menuitem",
                listbox: "option"
            }[this.options.role]
        },
        focus: function (a, b) {
            var c, d;
            this.blur(a, a && a.type === "focus"), this._scrollIntoView(b), this.active = b.first(), d = this.active.children("a").addClass("ui-state-focus"), this.options.role && this.element.attr("aria-activedescendant", d.attr("id")), this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"), a && a.type === "keydown" ? this._close() : this.timer = this._delay(function () {
                this._close()
            }, this.delay), c = b.children(".ui-menu"), c.length && /^mouse/.test(a.type) && this._startOpening(c), this.activeMenu = b.parent(), this._trigger("focus", a, {
                item: b
            })
        },
        _scrollIntoView: function (b) {
            var c, d, e, f, g, h;
            this._hasScroll() && (c = parseFloat(a.css(this.activeMenu[0], "borderTopWidth")) || 0, d = parseFloat(a.css(this.activeMenu[0], "paddingTop")) || 0, e = b.offset().top - this.activeMenu.offset().top - c - d, f = this.activeMenu.scrollTop(), g = this.activeMenu.height(), h = b.height(), e < 0 ? this.activeMenu.scrollTop(f + e) : e + h > g && this.activeMenu.scrollTop(f + e - g + h))
        },
        blur: function (a, b) {
            b || clearTimeout(this.timer);
            if (!this.active) return;
            this.active.children("a").removeClass("ui-state-focus"), this.active = null, this._trigger("blur", a, {
                item: this.active
            })
        },
        _startOpening: function (a) {
            clearTimeout(this.timer);
            if (a.attr("aria-hidden") !== "true") return;
            this.timer = this._delay(function () {
                this._close(), this._open(a)
            }, this.delay)
        },
        _open: function (b) {
            var c = a.extend({
                of: this.active
            }, this.options.position);
            clearTimeout(this.timer), this.element.find(".ui-menu").not(b.parents(".ui-menu")).hide().attr("aria-hidden", "true"), b.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(c)
        },
        collapseAll: function (b, c) {
            clearTimeout(this.timer), this.timer = this._delay(function () {
                var d = c ? this.element : a(b && b.target).closest(this.element.find(".ui-menu"));
                d.length || (d = this.element), this._close(d), this.blur(b), this.activeMenu = d
            }, this.delay)
        },
        _close: function (a) {
            a || (a = this.active ? this.active.parent() : this.element), a.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false").end().find("a.ui-state-active").removeClass("ui-state-active")
        },
        collapse: function (a) {
            var b = this.active && this.active.parent().closest(".ui-menu-item", this.element);
            b && b.length && (this._close(), this.focus(a, b))
        },
        expand: function (a) {
            var b = this.active && this.active.children(".ui-menu ").children(".ui-menu-item").first();
            b && b.length && (this._open(b.parent()), this._delay(function () {
                this.focus(a, b)
            }))
        },
        next: function (a) {
            this._move("next", "first", a)
        },
        previous: function (a) {
            this._move("prev", "last", a)
        },
        isFirstItem: function () {
            return this.active && !this.active.prevAll(".ui-menu-item").length
        },
        isLastItem: function () {
            return this.active && !this.active.nextAll(".ui-menu-item").length
        },
        _move: function (a, b, c) {
            var d;
            this.active && (a === "first" || a === "last" ? d = this.active[a === "first" ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1) : d = this.active[a + "All"](".ui-menu-item").eq(0));
            if (!d || !d.length || !this.active) d = this.activeMenu.children(".ui-menu-item")[b]();
            this.focus(c, d)
        },
        nextPage: function (b) {
            var c, d, e;
            if (!this.active) {
                this.next(b);
                return
            }
            if (this.isLastItem()) return;
            this._hasScroll() ? (d = this.active.offset().top, e = this.element.height(), this.active.nextAll(".ui-menu-item").each(function () {
                return c = a(this), c.offset().top - d - e < 0
            }), this.focus(b, c)) : this.focus(b, this.activeMenu.children(".ui-menu-item")[this.active ? "last" : "first"]())
        },
        previousPage: function (b) {
            var c, d, e;
            if (!this.active) {
                this.next(b);
                return
            }
            if (this.isFirstItem()) return;
            this._hasScroll() ? (d = this.active.offset().top, e = this.element.height(), this.active.prevAll(".ui-menu-item").each(function () {
                return c = a(this), c.offset().top - d + e > 0
            }), this.focus(b, c)) : this.focus(b, this.activeMenu.children(".ui-menu-item").first())
        },
        _hasScroll: function () {
            return this.element.outerHeight() < this.element.prop("scrollHeight")
        },
        select: function (b) {
            var c = {
                item: this.active || a(b.target).closest(".ui-menu-item")
            };
            c.item.has(".ui-menu").length || this.collapseAll(b, !0), this._trigger("select", b, c)
        }
    })
}), define("jquery.ui.menu.inputmenu", ["jquery", "jqueryui/menu"], function (a) {
    var b = a.ui.menu.prototype,
        c = b.refresh;
    a.extend(b, {
        refresh: function () {
            c.call(this);
            var b = this,
                d = this.element.find("li.ui-menu-item"),
                e = !1;
            this.element.bind("click.menu", function (a) {
                (new RegExp(/^a$/i)).test(a.target.tagName) || a.preventDefault()
            });
            var f = 0;
            this.element.find("input[type='checkbox'], input[type='radio']").each(function () {
                var b = a(this).closest("label");
                b.length && (a(this).insertBefore(b), a(this).attr("id") || a(this).attr("id", "ui-input-" + f++), b.attr("for", a(this).attr("id")))
            }), this.element.bind("menufocus", function (b) {
                var c = a(b.target).find("a.ui-state-focus").children("input[type='text']");
                c.length && c[0].focus()
            }), this.element.bind("popupopen", function (c) {
                var d = a(c.target).find("input[type=radio][checked]").closest(".ui-menu-item");
                d.length && setTimeout(function () {
                    b.focus(c, d)
                }, 0)
            }).bind("menublur", function (b) {
                var c = a(b.target).find("input[type='text']:focus");
                c.length && c[0].blur()
            }), d.children("a").each(function (b, c) {
                var d = a(c),
                    f = d.parent();
                d.children().is("input[type='checkbox'], input[type='radio']") && (d.closest("ul").addClass("ui-menu-icons"), d.children("input[type='checkbox']").is(":checked") ? (d.prepend('<span class="ui-icon ui-icon-check"></span>'), f.attr({
                    role: "menuitemcheckbox",
                    "aria-checked": "true"
                })) : d.children("input[type='radio']").is(":checked") ? (d.prepend('<span class="ui-icon ui-icon-radio-on"></span>'), f.attr({
                    role: "menuitemradio",
                    "aria-checked": "true"
                })) : d.children("input[type='radio']").length ? (d.prepend('<span class="ui-icon ui-icon-radio-off"></span>'), f.attr({
                    role: "menuitemradio",
                    "aria-checked": "false"
                })) : f.attr({
                    role: "menuitemcheckbox",
                    "aria-checked": "false"
                }), d.children().is("input[type='radio']") && f.attr("radio-group", d.children("input[type='radio']").attr("name")), f.prev().length && !f.prev().children("a").length ? (f.prev().addClass("ui-state-disabled").html("<span class='ui-menu-input-group'>" + f.prev().text() + "</span>").bind("click.menu", function (a) {
                    return !1
                }).after("<li><hr /></li>"), e = !0) : f.prev().length && !f.prev().children("a").children().is("input[type='checkbox'], input[type='radio']") && f.before("<li><hr /></li>"), e && f.next().length && !f.next().children("a").children().is("input[type='checkbox'], input[type='radio']") ? (f.after("<li><hr /></li>"), e = !1) : f.next().length && !f.next().children("a").children().is("input[type='checkbox'], input[type='radio']") && f.after("<li><hr /></li>"), d.children("input[type='checkbox'], input[type='radio']").hide())
            }), d.bind("keydown.menu", function (c) {
                c.keyCode === a.ui.keyCode.SPACE && (b.active.children("a").children().is("input[type='checkbox'], input[type='radio']") && (b.select(c), c.stopImmediatePropagation()), c.preventDefault())
            }), d.find("input[type='text']").bind("keydown", function (c) {
                c.stopPropagation(), c.keyCode === a.ui.keyCode.UP && (b.element.trigger("focus"), this.blur(), b.focus(c, a(this).closest(".ui-menu-item").prev())), c.keyCode === a.ui.keyCode.DOWN && (b.element.trigger("focus"), this.blur(), b.focus(c, a(this).closest(".ui-menu-item").next()))
            }).bind("click", function (a) {
                a.stopPropagation()
            })
        },
        select: function (b) {
            var c = {
                item: this.active || a(b.target).closest(".ui-menu-item")
            };
            c.item.children("a").children().is("input[type='checkbox']") && (c.item.attr("aria-checked") === "false" ? (c.item.children("a").prepend('<span class="ui-icon ui-icon-check"></span>'), c.item.attr("aria-checked", "true"), c.item.children("a").children("input[type='checkbox']").prop("checked", "checked").trigger("change")) : c.item.attr("aria-checked") === "true" && (c.item.children("a").children("span.ui-icon-check").remove(), c.item.attr("aria-checked", "false"), c.item.children("a").children("input[type='checkbox']").removeAttr("checked").trigger("change"))), c.item.children("a").children().is("input[type='radio']") && c.item.attr("aria-checked") === "false" && (c.item.children("a").children("span.ui-icon-radio-off").toggleClass("ui-icon-radio-on ui-icon-radio-off"), c.item.attr("aria-checked", "true"), c.item.children("a").children("input[type='radio']").prop("checked", "checked").trigger("change"), c.item.siblings("[radio-group=" + a(c.item).attr("radio-group") + "]").each(function () {
                a(this).attr("aria-checked", "false"), a(this).children("a").children("span.ui-icon-radio-on").toggleClass("ui-icon-radio-on ui-icon-radio-off"), a(this).children("a").children("input[type='radio']").removeAttr("checked")
            })), c.item.children("a").children().is("input[type='checkbox'], input[type='radio']") || this.collapseAll(), this._trigger("select", b, c)
        }
    })
}), define("jqueryui/popup", ["jquery", "jqueryui/core", "jqueryui/widget", "jqueryui/position"], function (a) {
    var b = 0,
        c = !1;
    a.widget("ui.popup", {
        version: "@VERSION",
        options: {
            position: {
                my: "left top",
                at: "left bottom"
            },
            managed: !1,
            expandOnFocus: !1,
            show: {
                effect: "slideDown",
                duration: 0
            },
            hide: {
                effect: "fadeOut",
                duration: 0
            }
        },
        _create: function () {
            this.options.trigger || (this.options.trigger = this.element.prev()), this.element.attr("id") || (this.element.attr("id", "ui-popup-" + b++), this.generatedId = !0), this.element.attr("role") || this.options.managed || (this.element.attr("role", "dialog"), this.generatedRole = !0), this.options.trigger.attr("aria-haspopup", "true").attr("aria-owns", this.element.attr("id")), this.element.addClass("ui-popup"), this._beforeClose(), this.element.hide();
            var d = function (b) {
                    var d = !1;
                    a(b.target).is("input") && (d = !0);
                    if (this.isOpen) {
                        c = !0, this.close();
                        return
                    }
                    this.open(b), clearTimeout(this.closeTimer), this._delay(function () {
                        d || this.focusPopup()
                    }, 1)
                };
            this._on(this.options.trigger, {
                keydown: function (b) {
                    switch (b.keyCode) {
                    case a.ui.keyCode.TAB:
                        this.element.hide(), this.close(b);
                        break;
                    case a.ui.keyCode.ESCAPE:
                        this.isOpen && this.close(b);
                        break;
                    case a.ui.keyCode.SPACE:
                    case a.ui.keyCode.DOWN:
                    case a.ui.keyCode.UP:
                        b.preventDefault(), clearTimeout(this.closeTimer), this._delay(function () {
                            this.open(b), this.focusPopup(b)
                        }, 1)
                    }
                },
                mouseup: function (a) {
                    this.mouseClickTimer = window.setTimeout(function () {
                        delete this.mouseClickTimer
                    }.bind(this), 0)
                },
                click: function (a) {
                    a.stopPropagation(), a.preventDefault(), this.mouseClickTimer || d.call(this, a)
                },
                mousedown: d
            }), this.options.expandOnFocus && this._on(this.options.trigger, {
                focus: function (a) {
                    c || this._delay(function () {
                        this.isOpen || this.open(a)
                    }, 1), this._delay(function () {
                        c = !1
                    }, 100)
                },
                blur: function (a) {
                    c = !1
                }
            }), this.options.managed || this._on({
                keydown: function (b) {
                    if (b.keyCode !== a.ui.keyCode.TAB) return;
                    var c = a(":tabbable", this.element),
                        d = c.first(),
                        e = c.last();
                    b.target === e[0] && !b.shiftKey ? (d.focus(1), b.preventDefault()) : b.target === d[0] && b.shiftKey && (e.focus(1), b.preventDefault())
                }
            }), this._on({
                focusout: function (a) {
                    this.closeTimer = this._delay(function () {
                        this.close(a)
                    }, 150)
                },
                focusin: function (a) {
                    clearTimeout(this.closeTimer)
                },
                mouseup: function (a) {
                    clearTimeout(this.closeTimer)
                }
            }), this._on({
                keyup: function (b) {
                    b.keyCode === a.ui.keyCode.ESCAPE && this.element.is(":visible") && (this.close(b), this.focusTrigger())
                }
            }), this._on(this.document, {
                click: function (b) {
                    this.isOpen && !a(b.target).closest(this.element.add(this.options.trigger)).length && this.close(b)
                }
            })
        },
        _destroy: function () {
            this.element.show().removeClass("ui-popup").removeAttr("aria-hidden").removeAttr("aria-expanded").unbind("keypress.ui-popup"), this.options.trigger.removeAttr("aria-haspopup").removeAttr("aria-owns"), this.generatedId && this.element.removeAttr("id"), this.generatedRole && this.element.removeAttr("role")
        },
        open: function (b) {
            var c = a.extend({}, {
                of: this.options.trigger
            }, this.options.position);
            this._show(this.element, this.options.show), this.element.attr("aria-hidden", "false").attr("aria-expanded", "true").position(c), this.options.trigger.attr("tabindex", -1), this.isOpen = !0, this._trigger("open", b)
        },
        focusPopup: function (a) {
            if (!this.options.managed) {
                var b = this.element.find(":tabbable");
                this.removeTabIndex = !1, b.length || (this.element.is(":tabbable") || (this.element.attr("tabindex", "0"), this.removeTabIndex = !0), b = b.add(this.element[0])), b.first().focus(1)
            }
            this._trigger("focusPopup", a)
        },
        focusTrigger: function (a) {
            c = !0, this.options.trigger.focus(), this._trigger("focusTrigger", a)
        },
        close: function (a) {
            this._beforeClose(), this._hide(this.element, this.options.hide), this.options.trigger.attr("tabindex", 0), this.removeTabIndex && this.element.removeAttr("tabindex"), this.isOpen = !1, this._trigger("close", a)
        },
        _beforeClose: function () {
            this.element.attr("aria-hidden", "true").attr("aria-expanded", "false")
        }
    })
}), function () {
    var a = function (a, b) {
            return function () {
                return a.apply(b, arguments)
            }
        };
    define("compiled/jquery.kylemenu", ["jquery", "jquery.ui.menu.inputmenu", "jqueryui/button", "jqueryui/popup"], function (b) {
        var c;
        return c = function () {
            function c(d, e) {
                this.keepButtonActive = a(this.keepButtonActive, this), this.close = a(this.close, this), this.onClose = a(this.onClose, this), this.select = a(this.select, this), this.onOpen = a(this.onOpen, this);
                var f, g, h, i = this;
                this.$trigger = b(d).data("kyleMenu", this), this.opts = b.extend(!0, {}, c.defaults, e), this.opts.noButton || (this.opts.buttonOpts.addDropArrow && this.$trigger.append('<i class="icon-mini-arrow-down"></i>'), this.$trigger.button(this.opts.buttonOpts), this.$trigger.bind("mouseleave.button", this.keepButtonActive)), this.$menu = this.$trigger.next().menu(this.opts.menuOpts).popup(this.opts.popupOpts).addClass("ui-kyle-menu use-css-transitions-for-show-hide"), this.opts.appendMenuTo && (f = this.$menu.data("popup"), h = f.open, g = this, f.open = function () {
                    return g.$menu.appendTo(g.opts.appendMenuTo), h.apply(this, arguments)
                }, this.$placeholder = b('<span style="display:none;">').insertAfter(this.$menu), this.$menu.bind("click", function () {
                    var a;
                    return (a = i.$placeholder).trigger.apply(a, arguments)
                })), this.opts.notifyMenuActiveOnParent && (this.$notifyParent = this.$trigger.closest(this.opts.notifyMenuActiveOnParent)), this.$menu.on({
                    menuselect: this.select,
                    popupopen: this.onOpen,
                    popupclose: this.onClose
                })
            }
            return c.prototype.onOpen = function (a) {
                this.adjustCarat(a), this.$menu.addClass("ui-state-open");
                if (this.opts.notifyMenuActiveOnParent) return this.$notifyParent.addClass("menu_active")
            }, c.prototype.open = function () {
                return this.$menu.popup("open")
            }, c.prototype.select = function (a, c) {
                var d, e;
                return ((e = a.originalEvent) != null ? e.type : void 0) !== "click" && (d = b(c.item).find("a")) && (a.preventDefault(), d.trigger("click")), this.close()
            }, c.prototype.onClose = function () {
                this.opts.appendMenuTo && this.$menu.insertBefore(this.$placeholder), this.$trigger.removeClass("ui-state-active"), this.$menu.removeClass("ui-state-open");
                if (this.opts.notifyMenuActiveOnParent) return this.$notifyParent.removeClass("menu_active")
            }, c.prototype.close = function () {
                return this.$menu.popup("close").removeClass("ui-state-open")
            }, c.prototype.keepButtonActive = function () {
                if (this.$menu.is(".ui-state-open") && this.$trigger.is(".btn, .ui-button")) return this.$trigger.addClass("ui-state-active")
            }, c.prototype.adjustCarat = function (a) {
                var c, d, e, f, g, h, i;
                return (i = this.$carat) != null && i.remove(), this.$trigger.is(".btn, .ui-button") && this.$trigger.addClass("ui-state-active"), h = this.$trigger.outerWidth(), g = this.$trigger.offset().left, f = a.pageX || g + h / 2, e = g - this.$menu.offset().left, c = f - this.$trigger.offset().left, d = Math.min(Math.max(6, c), h - 6) + e, this.$carat = b('<span class="ui-menu-carat"><span /></span>').css("left", d).prependTo(this.$menu), this.$menu.css("-webkit-transform-origin-x", d + "px")
            }, c.defaults = {
                popupOpts: {
                    position: {
                        my: "center top",
                        at: "center bottom",
                        offset: "0 10px",
                        within: "#main",
                        collision: "fit"
                    }
                },
                buttonOpts: {
                    addDropArrow: !0
                }
            }, c
        }(), b.fn.kyleMenu = function (a) {
            return this.each(function () {
                if (!b(this).data().kyleMenu) return new c(this, a)
            })
        }, c
    })
}.call(this), function () {
    define("compiled/behaviors/admin-links", ["jquery", "compiled/jquery.kylemenu"], function (a, b) {
        return a(document).on("mousedown mouseup click keydown", ".al-trigger", function (c) {
            var d, e;
            d = a(this);
            if (d.data("kyleMenu")) return;
            return e = a.extend({
                noButton: !0
            }, d.data("kyleMenuOptions")), d.data("append-to-body") && (e.appendMenuTo = "body"), new b(d, e), d.trigger(c)
        })
    })
}.call(this), function () {
    define("compiled/behaviors/activate", ["jquery"], function (a) {
        return a(document).on("keydown", "[role=button], [role=checkbox]", function (b) {
            if (b.keyCode === 13) return a(b.target).trigger("keyclick")
        }), a(document).on("keyup", "[role=button], [role=checkbox]", function (b) {
            if (b.keyCode === 32) return a(b.target).trigger("keyclick")
        })
    })
}.call(this), function () {
    define("compiled/behaviors/elementToggler", ["jquery", "compiled/jquery/fixDialogButtons"], function (a) {
        var b, c;
        return c = function (b) {
            return function () {
                var c, d, e, f;
                c = a(this);
                if (!(d = c.data("htmlWhileTarget" + b))) return;
                return e = "htmlWhileTarget" + (b === "Hidden" ? "Shown" : "Hidden"), f = c.data(e), f || c.data(e, c.html()), c.html(d)
            }
        }, b = function (d, e, f) {
            var g, h;
            e == null && (e = d.is(":ui-dialog:hidden") || d.attr("aria-expanded") !== "true"), g = a("[aria-controls*=" + d.attr("id") + "]"), g.filter(function () {
                return a(this).data("hideWhileTargetShown")
            }).toggle(!e), f && f.attr("aria-expanded") !== void 0 ? (f.attr("aria-expanded", f.attr("aria-expanded") !== "true"), d.toggle(f.attr("aria-expanded") === "true")) : d.attr("aria-expanded", "" + e).toggle(e);
            if (d.is(":ui-dialog") || (h = d.data("turnIntoDialog"))) h && e && (h = a.extend({
                autoOpen: !1,
                close: function () {
                    return b(d, !1)
                }
            }, h), d.dialog(h).fixDialogButtons()), e ? (d.dialog("open"), d.data("read-on-open") && d.dialog("widget").attr("aria-live", "assertive").attr("aria-atomic", "true")) : d.dialog("isOpen") && d.dialog("close");
            return g.each(c(e ? "Shown" : "Hidden"))
        }, a(document).on("click change keyclick", ".element_toggler[aria-controls]", function (c) {
            var d, e, f, g, h;
            g = a(this);
            if (g.is('input[type="checkbox"]')) {
                if (c.type === "click") return;
                h = g.prop("checked")
            }
            c.type === "click" && c.preventDefault(), e = g.closest(".user_content"), e.length || (e = a(document.body)), f = e.find("#" + g.attr("aria-controls").replace(/\s/g, ", #")), f.length && b(f, h, g), d = g.find('i[class*="icon-mini-arrow"].auto_rotate');
            if (d.length) return d.toggleClass("icon-mini-arrow-down"), d.toggleClass("icon-mini-arrow-right")
        })
    })
}.call(this), define("jqueryui/tooltip", ["jquery", "jqueryui/core", "jqueryui/widget", "jqueryui/position"], function (a) {
    function c(b, c) {
        var d = (b.attr("aria-describedby") || "").split(/\s+/);
        d.push(c), b.data("ui-tooltip-id", c).attr("aria-describedby", a.trim(d.join(" ")))
    }
    function d(b) {
        var c = b.data("ui-tooltip-id"),
            d = (b.attr("aria-describedby") || "").split(/\s+/),
            e = a.inArray(c, d);
        e !== -1 && d.splice(e, 1), b.removeData("ui-tooltip-id"), d = a.trim(d.join(" ")), d ? b.attr("aria-describedby", d) : b.removeAttr("aria-describedby")
    }
    var b = 0;
    a.widget("ui.tooltip", {
        version: "@VERSION",
        options: {
            content: function () {
                return a(this).attr("title")
            },
            hide: !0,
            items: "[title]",
            position: {
                my: "left+15 center",
                at: "right center",
                collision: "flipfit flipfit"
            },
            show: !0,
            tooltipClass: null,
            track: !1,
            close: null,
            open: null
        },
        _create: function () {
            this._on({
                mouseover: "open",
                focusin: "open"
            }), this.tooltips = {}
        },
        _setOption: function (a, b) {
            if (a === "disabled") {
                this[b ? "_disable" : "_enable"](), this.options[a] = b;
                return
            }
            this._super(a, b)
        },
        _disable: function () {
            var b = this;
            a.each(this.tooltips, function (c, d) {
                var e = a.Event("blur");
                e.target = e.currentTarget = d[0], b.close(e, !0)
            }), this.element.find(this.options.items).andSelf().each(function () {
                var b = a(this);
                b.is("[title]") && b.data("ui-tooltip-title", b.attr("title")).attr("title", "")
            })
        },
        _enable: function () {
            this.element.find(this.options.items).andSelf().each(function () {
                var b = a(this);
                b.data("ui-tooltip-title") && b.attr("title", b.data("ui-tooltip-title"))
            })
        },
        open: function (b) {
            var c, d = this,
                e = a(b ? b.target : this.element).closest(this.options.items);
            if (!e.length) return;
            if (this.options.track && e.data("ui-tooltip-id")) {
                this._find(e).position(a.extend({
                    of: e
                }, this.options.position));
                return
            }
            e.attr("title") && e.data("ui-tooltip-title", e.attr("title")), e.data("tooltip-open", !0), c = this.options.content.call(e[0], function (a) {
                if (!e.data("tooltip-open")) return;
                setTimeout(function () {
                    d._open(b, e, a)
                }, 1)
            }), c && d._open(b, e, c)
        },
        _open: function (b, d, e) {
            function h(a) {
                g.of = a, f.position(g)
            }
            var f, g;
            if (!e) return;
            f = this._find(d);
            if (f.length) {
                f.find(".ui-tooltip-content").html(e);
                return
            }
            d.is("[title]") && (b && b.type === "mouseover" ? d.attr("title", "") : d.removeAttr("title")), f = this._tooltip(d), c(d, f.attr("id")), f.find(".ui-tooltip-content").html(e), this.options.track && b && /^mouse/.test(b.originalEvent.type) ? (g = a.extend({}, this.options.position), this._on(this.document, {
                mousemove: h
            }), h(b)) : f.position(a.extend({
                of: d
            }, this.options.position)), f.hide(), this._show(f, this.options.show), this._trigger("open", b, {
                tooltip: f
            }), this._on(d, {
                mouseleave: "close",
                focusout: "close",
                keyup: function (b) {
                    if (b.keyCode === a.ui.keyCode.ESCAPE) {
                        var c = a.Event(b);
                        c.currentTarget = d[0], this.close(c, !0)
                    }
                }
            })
        },
        close: function (b, c) {
            var e = this,
                f = a(b ? b.currentTarget : this.element),
                g = this._find(f);
            if (this.closing) return;
            if (!c && b && b.type !== "focusout" && this.document[0].activeElement === f[0]) return;
            f.data("ui-tooltip-title") && f.attr("title", f.data("ui-tooltip-title")), d(f), g.stop(!0), this._hide(g, this.options.hide, function () {
                a(this).remove(), delete e.tooltips[this.id]
            }), f.removeData("tooltip-open"), this._off(f, "mouseleave focusout keyup"), this._off(this.document, "mousemove"), this.closing = !0, this._trigger("close", b, {
                tooltip: g
            }), this.closing = !1
        },
        _tooltip: function (c) {
            var d = "ui-tooltip-" + b++,
                e = a("<div>").attr({
                    id: d,
                    role: "tooltip"
                }).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content " + (this.options.tooltipClass || ""));
            return a("<div>").addClass("ui-tooltip-content").appendTo(e), e.appendTo(this.document[0].body), a.fn.bgiframe && e.bgiframe(), this.tooltips[d] = c, e
        },
        _find: function (b) {
            var c = b.data("ui-tooltip-id");
            return c ? a("#" + c) : a()
        },
        _destroy: function () {
            a.each(this.tooltips, function (b) {
                a("#" + b).remove()
            })
        }
    })
}), function () {
    define("compiled/behaviors/tooltip", ["underscore", "jquery", "jqueryui/tooltip"], function (a, b) {
        var c, d;
        return function (a) {
            return a.widget("custom.timeoutTooltip", a.ui.tooltip, {
                _open: function (b, c, d) {
                    var e, f = this;
                    if (this.timeout) return;
                    return e = this._superApply.bind(this, arguments), this.timeout = setTimeout(function () {
                        return delete f.timeout, f._off(c, "mouseleave focusout keyup"), e.call(f)
                    }, 20), this._on(c, {
                        mouseleave: "close",
                        focusout: "close",
                        keyup: function (b) {
                            var d;
                            if (b.keyCode === a.ui.keyCode.ESCAPE) return d = a.Event(b), d.currentTarget = c[0], this.close(d, !0)
                        }
                    })
                },
                close: function (a) {
                    if (this.timeout) {
                        clearTimeout(this.timeout), delete this.timeout;
                        return
                    }
                    return this._superApply(arguments)
                }
            })
        }(b), d = function (a, c) {
            return b(this).css(a).removeClass("left right top bottom center middle vertical horizontal").addClass([c.horizontal, c.vertical, c.important].join(" "))
        }, c = function (a) {
            var b, c;
            b = function () {
                var b;
                return ((b = a.tooltipClass) != null ? b.match("popover") : void 0) ? 30 : 5
            }, c = {
                right: {
                    my: "left center",
                    at: "right+" + b() + " center",
                    collision: "flipfit flipfit"
                },
                left: {
                    my: "right center",
                    at: "left-" + b() + " center",
                    collision: "flipfit flipfit"
                },
                top: {
                    my: "center bottom",
                    at: "center top-" + b(),
                    collision: "flipfit flipfit"
                },
                bottom: {
                    my: "center top",
                    at: "center bottom+" + b(),
                    collision: "flipfit flipfit"
                }
            };
            if (a.position in c) return a.position = c[a.position]
        }, b("body").on("mouseenter focusin", "[data-tooltip]", function (a) {
            var e, f, g;
            e = b(this), f = e.data("tooltip");
            if (f === "right" || f === "left" || f === "top" || f === "bottom") f = {
                position: f
            };
            return f || (f = {}), f.position || (f.position = "top"), c(f), f.collision && (f.position.collision = f.collision), (g = f.position).using || (g.using = d), e.data("tooltip-title") && (f.content = function () {
                return b(this).data("tooltip-title")
            }, f.items = "[data-tooltip-title]"), e.removeAttr("data-tooltip").timeoutTooltip(f).timeoutTooltip("open").click(function () {
                return e.timeoutTooltip("close")
            })
        })
    })
}.call(this), define("vendor/mediaelement-and-player", ["jquery"], function (a) {
    function c() {
        b.YouTubeApi.iFrameReady()
    }
    function d(a) {
        b.YouTubeApi.flashReady(a)
    }
    var b = b || {};
    return b.version = "2.9.5", b.meIndex = 0, b.plugins = {
        silverlight: [{
            version: [3, 0],
            types: ["video/mp4", "video/m4v", "video/mov", "video/wmv", "audio/wma", "audio/m4a", "audio/mp3", "audio/wav", "audio/mpeg"]
        }],
        flash: [{
            version: [9, 0, 124],
            types: ["video/mp4", "video/m4v", "video/mov", "video/flv", "video/rtmp", "video/x-flv", "audio/flv", "audio/x-flv", "audio/mp3", "audio/m4a", "audio/mpeg", "video/youtube", "video/x-youtube"]
        }],
        youtube: [{
            version: null,
            types: ["video/youtube", "video/x-youtube"]
        }],
        vimeo: [{
            version: null,
            types: ["video/vimeo"]
        }]
    }, b.Utility = {
        encodeUrl: function (a) {
            return encodeURIComponent(a)
        },
        escapeHTML: function (a) {
            return a.toString().split("&").join("&amp;").split("<").join("&lt;").split('"').join("&quot;")
        },
        absolutizeUrl: function (a) {
            var b = document.createElement("div");
            return b.innerHTML = '<a href="' + this.escapeHTML(a) + '">x</a>', b.firstChild.href
        },
        getScriptPath: function (a) {
            var b = 0,
                c, d = "",
                e = "",
                f, g = document.getElementsByTagName("script"),
                h = g.length,
                i = a.length;
            for (; b < h; b++) {
                f = g[b].src;
                for (c = 0; c < i; c++) {
                    e = a[c];
                    if (f.indexOf(e) > -1) {
                        d = f.substring(0, f.indexOf(e));
                        break
                    }
                }
                if (d !== "") break
            }
            return d
        },
        secondsToTimeCode: function (a, b, c, d) {
            typeof c == "undefined" ? c = !1 : typeof d == "undefined" && (d = 25);
            var e = Math.floor(a / 3600) % 24,
                f = Math.floor(a / 60) % 60,
                g = Math.floor(a % 60),
                h = Math.floor((a % 1 * d).toFixed(3)),
                i = (b || e > 0 ? (e < 10 ? "0" + e : e) + ":" : "") + (f < 10 ? "0" + f : f) + ":" + (g < 10 ? "0" + g : g) + (c ? ":" + (h < 10 ? "0" + h : h) : "");
            return i
        },
        timeCodeToSeconds: function (a, b, c, d) {
            typeof c == "undefined" ? c = !1 : typeof d == "undefined" && (d = 25);
            var e = a.split(":"),
                f = parseInt(e[0], 10),
                g = parseInt(e[1], 10),
                h = parseInt(e[2], 10),
                i = 0,
                j = 0;
            return c && (i = parseInt(e[3]) / d), j = f * 3600 + g * 60 + h + i, j
        },
        convertSMPTEtoSeconds: function (a) {
            if (typeof a != "string") return !1;
            a = a.replace(",", ".");
            var b = 0,
                c = a.indexOf(".") != -1 ? a.split(".")[1].length : 0,
                d = 1;
            a = a.split(":").reverse();
            for (var e = 0; e < a.length; e++) d = 1, e > 0 && (d = Math.pow(60, e)), b += Number(a[e]) * d;
            return Number(b.toFixed(c))
        },
        removeSwf: function (a) {
            var c = document.getElementById(a);
            c && c.nodeName == "OBJECT" && (b.MediaFeatures.isIE ? (c.style.display = "none", function () {
                c.readyState == 4 ? b.Utility.removeObjectInIE(a) : setTimeout(arguments.callee, 10)
            }()) : c.parentNode.removeChild(c))
        },
        removeObjectInIE: function (a) {
            var b = document.getElementById(a);
            if (b) {
                for (var c in b) typeof b[c] == "function" && (b[c] = null);
                b.parentNode.removeChild(b)
            }
        }
    }, b.PluginDetector = {
        hasPluginVersion: function (a, b) {
            var c = this.plugins[a];
            return b[1] = b[1] || 0, b[2] = b[2] || 0, c[0] > b[0] || c[0] == b[0] && c[1] > b[1] || c[0] == b[0] && c[1] == b[1] && c[2] >= b[2] ? !0 : !1
        },
        nav: window.navigator,
        ua: window.navigator.userAgent.toLowerCase(),
        plugins: [],
        addPlugin: function (a, b, c, d, e) {
            this.plugins[a] = this.detectPlugin(b, c, d, e)
        },
        detectPlugin: function (a, b, c, d) {
            var e = [0, 0, 0],
                f, g, h;
            if (typeof this.nav.plugins != "undefined" && typeof this.nav.plugins[a] == "object") {
                f = this.nav.plugins[a].description;
                if (f && (typeof this.nav.mimeTypes == "undefined" || !this.nav.mimeTypes[b] || !! this.nav.mimeTypes[b].enabledPlugin)) {
                    e = f.replace(a, "").replace(/^\s+/, "").replace(/\sr/gi, ".").split(".");
                    for (g = 0; g < e.length; g++) e[g] = parseInt(e[g].match(/\d+/), 10)
                }
            } else if (typeof window.ActiveXObject != "undefined") try {
                h = new ActiveXObject(c), h && (e = d(h))
            } catch (i) {}
            return e
        }
    }, b.PluginDetector.addPlugin("flash", "Shockwave Flash", "application/x-shockwave-flash", "ShockwaveFlash.ShockwaveFlash", function (a) {
        var b = [],
            c = a.GetVariable("$version");
        return c && (c = c.split(" ")[1].split(","), b = [parseInt(c[0], 10), parseInt(c[1], 10), parseInt(c[2], 10)]), b
    }), b.PluginDetector.addPlugin("silverlight", "Silverlight Plug-In", "application/x-silverlight-2", "AgControl.AgControl", function (a) {
        var b = [0, 0, 0, 0],
            c = function (a, b, c, d) {
                while (a.isVersionSupported(b[0] + "." + b[1] + "." + b[2] + "." + b[3])) b[c] += d;
                b[c] -= d
            };
        return c(a, b, 0, 1), c(a, b, 1, 1), c(a, b, 2, 1e4), c(a, b, 2, 1e3), c(a, b, 2, 100), c(a, b, 2, 10), c(a, b, 2, 1), c(a, b, 3, 1), b
    }), b.MediaFeatures = {
        init: function () {
            var a = this,
                c = document,
                d = b.PluginDetector.nav,
                e = b.PluginDetector.ua.toLowerCase(),
                f, g, h = ["source", "track", "audio", "video"];
            a.isiPad = e.match(/ipad/i) !== null, a.isiPhone = e.match(/iphone/i) !== null, a.isiOS = a.isiPhone || a.isiPad, a.isAndroid = e.match(/android/i) !== null, a.isBustedAndroid = e.match(/android 2\.[12]/) !== null, a.isIE = d.appName.toLowerCase().indexOf("microsoft") != -1, a.isChrome = e.match(/chrome/gi) !== null, a.isFirefox = e.match(/firefox/gi) !== null, a.isWebkit = e.match(/webkit/gi) !== null, a.isGecko = e.match(/gecko/gi) !== null && !a.isWebkit, a.isOpera = e.match(/opera/gi) !== null, a.hasTouch = "ontouchstart" in window;
            for (f = 0; f < h.length; f++) g = document.createElement(h[f]);
            a.supportsMediaTag = typeof g.canPlayType != "undefined" || a.isBustedAndroid, a.hasSemiNativeFullScreen = typeof g.webkitEnterFullscreen != "undefined", a.hasWebkitNativeFullScreen = typeof g.webkitRequestFullScreen != "undefined", a.hasMozNativeFullScreen = typeof g.mozRequestFullScreen != "undefined", a.hasTrueNativeFullScreen = a.hasWebkitNativeFullScreen || a.hasMozNativeFullScreen, a.nativeFullScreenEnabled = a.hasTrueNativeFullScreen, a.hasMozNativeFullScreen && (a.nativeFullScreenEnabled = g.mozFullScreenEnabled), this.isChrome && (a.hasSemiNativeFullScreen = !1), a.hasTrueNativeFullScreen && (a.fullScreenEventName = a.hasWebkitNativeFullScreen ? "webkitfullscreenchange" : "mozfullscreenchange", a.isFullScreen = function () {
                if (g.mozRequestFullScreen) return c.mozFullScreen;
                if (g.webkitRequestFullScreen) return c.webkitIsFullScreen
            }, a.requestFullScreen = function (b) {
                a.hasWebkitNativeFullScreen ? b.webkitRequestFullScreen() : a.hasMozNativeFullScreen && b.mozRequestFullScreen()
            }, a.cancelFullScreen = function () {
                a.hasWebkitNativeFullScreen ? document.webkitCancelFullScreen() : a.hasMozNativeFullScreen && document.mozCancelFullScreen()
            }), a.hasSemiNativeFullScreen && e.match(/mac os x 10_5/i) && (a.hasNativeFullScreen = !1, a.hasSemiNativeFullScreen = !1)
        }
    }, b.MediaFeatures.init(), b.HtmlMediaElement = {
        pluginType: "native",
        isFullScreen: !1,
        setCurrentTime: function (a) {
            this.currentTime = a
        },
        setMuted: function (a) {
            this.muted = a
        },
        setVolume: function (a) {
            this.volume = a
        },
        stop: function () {
            this.pause()
        },
        setSrc: function (a) {
            var b = this.getElementsByTagName("source");
            while (b.length > 0) this.removeChild(b[0]);
            if (typeof a == "string") this.src = a;
            else {
                var c, d;
                for (c = 0; c < a.length; c++) d = a[c], this.canPlayType(d.type) && (this.src = d.src)
            }
        },
        setVideoSize: function (a, b) {
            this.width = a, this.height = b
        }
    }, b.PluginMediaElement = function (a, b, c) {
        this.id = a, this.pluginType = b, this.src = c, this.events = {}
    }, b.PluginMediaElement.prototype = {
        pluginElement: null,
        pluginType: "",
        isFullScreen: !1,
        playbackRate: -1,
        defaultPlaybackRate: -1,
        seekable: [],
        played: [],
        paused: !0,
        ended: !1,
        seeking: !1,
        duration: 0,
        error: null,
        tagName: "",
        muted: !1,
        volume: 1,
        currentTime: 0,
        play: function () {
            this.pluginApi != null && (this.pluginType == "youtube" ? this.pluginApi.playVideo() : this.pluginApi.playMedia(), this.paused = !1)
        },
        load: function () {
            this.pluginApi != null && (this.pluginType != "youtube" && this.pluginApi.loadMedia(), this.paused = !1)
        },
        pause: function () {
            this.pluginApi != null && (this.pluginType == "youtube" ? this.pluginApi.pauseVideo() : this.pluginApi.pauseMedia(), this.paused = !0)
        },
        stop: function () {
            this.pluginApi != null && (this.pluginType == "youtube" ? this.pluginApi.stopVideo() : this.pluginApi.stopMedia(), this.paused = !0)
        },
        canPlayType: function (a) {
            var c, d, e, f = b.plugins[this.pluginType];
            for (c = 0; c < f.length; c++) {
                e = f[c];
                if (b.PluginDetector.hasPluginVersion(this.pluginType, e.version)) for (d = 0; d < e.types.length; d++) if (a == e.types[d]) return !0
            }
            return !1
        },
        positionFullscreenButton: function (a, b, c) {
            this.pluginApi != null && this.pluginApi.positionFullscreenButton && this.pluginApi.positionFullscreenButton(a, b, c)
        },
        hideFullscreenButton: function () {
            this.pluginApi != null && this.pluginApi.hideFullscreenButton && this.pluginApi.hideFullscreenButton()
        },
        setSrc: function (a) {
            if (typeof a == "string") this.pluginApi.setSrc(b.Utility.absolutizeUrl(a)), this.src = b.Utility.absolutizeUrl(a);
            else {
                var c, d;
                for (c = 0; c < a.length; c++) d = a[c], this.canPlayType(d.type) && (this.pluginApi.setSrc(b.Utility.absolutizeUrl(d.src)), this.src = b.Utility.absolutizeUrl(a))
            }
        },
        setCurrentTime: function (a) {
            this.pluginApi != null && (this.pluginType == "youtube" ? this.pluginApi.seekTo(a) : this.pluginApi.setCurrentTime(a), this.currentTime = a)
        },
        setVolume: function (a) {
            this.pluginApi != null && (this.pluginType == "youtube" ? this.pluginApi.setVolume(a * 100) : this.pluginApi.setVolume(a), this.volume = a)
        },
        setMuted: function (a) {
            this.pluginApi != null && (this.pluginType == "youtube" ? (a ? this.pluginApi.mute() : this.pluginApi.unMute(), this.muted = a, this.dispatchEvent("volumechange")) : this.pluginApi.setMuted(a), this.muted = a)
        },
        setVideoSize: function (a, b) {
            this.pluginElement.style && (this.pluginElement.style.width = a + "px", this.pluginElement.style.height = b + "px"), this.pluginApi != null && this.pluginApi.setVideoSize && this.pluginApi.setVideoSize(a, b)
        },
        setFullscreen: function (a) {
            this.pluginApi != null && this.pluginApi.setFullscreen && this.pluginApi.setFullscreen(a)
        },
        enterFullScreen: function () {
            this.pluginApi != null && this.pluginApi.setFullscreen && this.setFullscreen(!0)
        },
        exitFullScreen: function () {
            this.pluginApi != null && this.pluginApi.setFullscreen && this.setFullscreen(!1)
        },
        addEventListener: function (a, b, c) {
            this.events[a] = this.events[a] || [], this.events[a].push(b)
        },
        removeEventListener: function (a, b) {
            if (!a) return this.events = {}, !0;
            var c = this.events[a];
            if (!c) return !0;
            if (!b) return this.events[a] = [], !0;
            for (i = 0; i < c.length; i++) if (c[i] === b) return this.events[a].splice(i, 1), !0;
            return !1
        },
        dispatchEvent: function (a) {
            var b, c, d = this.events[a];
            if (d) {
                c = Array.prototype.slice.call(arguments, 1);
                for (b = 0; b < d.length; b++) d[b].apply(null, c)
            }
        },
        attributes: {},
        hasAttribute: function (a) {
            return a in this.attributes
        },
        removeAttribute: function (a) {
            delete this.attributes[a]
        },
        getAttribute: function (a) {
            return this.hasAttribute(a) ? this.attributes[a] : ""
        },
        setAttribute: function (a, b) {
            this.attributes[a] = b
        },
        remove: function () {
            b.Utility.removeSwf(this.pluginElement.id)
        }
    }, b.MediaPluginBridge = {
        pluginMediaElements: {},
        htmlMediaElements: {},
        registerPluginElement: function (a, b, c) {
            this.pluginMediaElements[a] = b, this.htmlMediaElements[a] = c
        },
        initPlugin: function (a) {
            var b = this.pluginMediaElements[a],
                c = this.htmlMediaElements[a];
            if (b) {
                switch (b.pluginType) {
                case "flash":
                    b.pluginElement = b.pluginApi = document.getElementById(a);
                    break;
                case "silverlight":
                    b.pluginElement = document.getElementById(b.id), b.pluginApi = b.pluginElement.Content.MediaElementJS
                }
                b.pluginApi != null && b.success && b.success(b, c)
            }
        },
        fireEvent: function (a, b, c) {
            var d, e, f, g = this.pluginMediaElements[a];
            g.ended = !1, g.paused = !0, d = {
                type: b,
                target: g
            };
            for (e in c) g[e] = c[e], d[e] = c[e];
            f = c.bufferedTime || 0, d.target.buffered = d.buffered = {
                start: function (a) {
                    return 0
                },
                end: function (a) {
                    return f
                },
                length: 1
            }, g.dispatchEvent(d.type, d)
        }
    }, b.MediaElementDefaults = {
        mode: "auto",
        plugins: ["flash", "silverlight", "youtube", "vimeo"],
        enablePluginDebug: !1,
        type: "",
        pluginPath: b.Utility.getScriptPath(["mediaelement.js", "mediaelement.min.js", "mediaelement-and-player.js", "mediaelement-and-player.min.js"]),
        flashName: "flashmediaelement.swf",
        flashStreamer: "",
        enablePluginSmoothing: !1,
        silverlightName: "silverlightmediaelement.xap",
        defaultVideoWidth: 480,
        defaultVideoHeight: 270,
        pluginWidth: -1,
        pluginHeight: -1,
        pluginVars: [],
        timerRate: 250,
        startVolume: .8,
        success: function () {},
        error: function () {}
    }, b.MediaElement = function (a, c) {
        return b.HtmlMediaElementShim.create(a, c)
    }, b.HtmlMediaElementShim = {
        create: function (a, c) {
            var d = b.MediaElementDefaults,
                e = typeof a == "string" ? document.getElementById(a) : a,
                f = e.tagName.toLowerCase(),
                g = f === "audio" || f === "video",
                h = g ? e.getAttribute("src") : e.getAttribute("href"),
                i = e.getAttribute("poster"),
                j = e.getAttribute("autoplay"),
                k = e.getAttribute("preload"),
                l = e.getAttribute("controls"),
                m, n;
            for (n in c) d[n] = c[n];
            return h = typeof h == "undefined" || h === null || h == "" ? null : h, i = typeof i == "undefined" || i === null ? "" : i, k = typeof k == "undefined" || k === null || k === "false" ? "none" : k, j = typeof j != "undefined" && j !== null && j !== "false", l = typeof l != "undefined" && l !== null && l !== "false", m = this.determinePlayback(e, d, b.MediaFeatures.supportsMediaTag, g, h), m.url = m.url !== null ? b.Utility.absolutizeUrl(m.url) : "", m.method == "native" ? (b.MediaFeatures.isBustedAndroid && (e.src = m.url, e.addEventListener("click", function () {
                e.play()
            }, !1)), this.updateNative(m, d, j, k)) : m.method !== "" ? this.createPlugin(m, d, i, j, k, l) : (this.createErrorMessage(m, d, i), this)
        },
        determinePlayback: function (a, c, d, e, f) {
            var g = [],
                h, i, j, k, l, m, n = {
                    method: "",
                    url: "",
                    htmlMediaElement: a,
                    isVideo: a.tagName.toLowerCase() != "audio"
                },
                o, p, q, r;
            if (typeof c.type != "undefined" && c.type !== "") if (typeof c.type == "string") g.push({
                type: c.type,
                url: f
            });
            else for (h = 0; h < c.type.length; h++) g.push({
                type: c.type[h],
                url: f
            });
            else if (f !== null) m = this.formatType(f, a.getAttribute("type")), g.push({
                type: m,
                url: f
            });
            else for (h = 0; h < a.childNodes.length; h++) l = a.childNodes[h], l.nodeType == 1 && l.tagName.toLowerCase() == "source" && (f = l.getAttribute("src"), m = this.formatType(f, l.getAttribute("type")), g.push({
                type: m,
                url: f
            }));
            !e && g.length > 0 && g[0].url !== null && this.getTypeFromFile(g[0].url).indexOf("audio") > -1 && (n.isVideo = !1), b.MediaFeatures.isBustedAndroid && (a.canPlayType = function (a) {
                return a.match(/video\/(mp4|m4v)/gi) !== null ? "maybe" : ""
            });
            if (d && (c.mode === "auto" || c.mode === "auto_plugin" || c.mode === "native")) {
                e || (r = document.createElement(n.isVideo ? "video" : "audio"), a.parentNode.insertBefore(r, a), a.style.display = "none", n.htmlMediaElement = a = r);
                for (h = 0; h < g.length; h++) if (a.canPlayType(g[h].type).replace(/no/, "") !== "" || a.canPlayType(g[h].type.replace(/mp3/, "mpeg")).replace(/no/, "") !== "") {
                    n.method = "native", n.url = g[h].url;
                    break
                }
                if (n.method === "native") {
                    n.url !== null && (a.src = n.url);
                    if (c.mode !== "auto_plugin") return n
                }
            }
            if (c.mode === "auto" || c.mode === "auto_plugin" || c.mode === "shim") for (h = 0; h < g.length; h++) {
                m = g[h].type;
                for (i = 0; i < c.plugins.length; i++) {
                    o = c.plugins[i], p = b.plugins[o];
                    for (j = 0; j < p.length; j++) {
                        q = p[j];
                        if (q.version == null || b.PluginDetector.hasPluginVersion(o, q.version)) for (k = 0; k < q.types.length; k++) if (m == q.types[k]) return n.method = o, n.url = g[h].url, n
                    }
                }
            }
            return c.mode === "auto_plugin" && n.method === "native" ? n : (n.method === "" && g.length > 0 && (n.url = g[0].url), n)
        },
        formatType: function (a, b) {
            var c;
            return a && !b ? this.getTypeFromFile(a) : b && ~b.indexOf(";") ? b.substr(0, b.indexOf(";")) : b
        },
        getTypeFromFile: function (a) {
            var b = a.substring(a.lastIndexOf(".") + 1);
            return (/(mp4|m4v|ogg|ogv|webm|webmv|flv|wmv|mpeg|mov)/gi.test(b) ? "video" : "audio") + "/" + this.getTypeFromExtension(b)
        },
        getTypeFromExtension: function (a) {
            switch (a) {
            case "mp4":
            case "m4v":
                return "mp4";
            case "webm":
            case "webma":
            case "webmv":
                return "webm";
            case "ogg":
            case "oga":
            case "ogv":
                return "ogg";
            default:
                return a
            }
        },
        createErrorMessage: function (a, b, c) {
            var d = a.htmlMediaElement,
                e = document.createElement("div");
            e.className = "me-cannotplay";
            try {
                e.style.width = d.width + "px", e.style.height = d.height + "px"
            } catch (f) {}
            e.innerHTML = c !== "" ? '<a href="' + a.url + '"><img src="' + c + '" width="100%" height="100%" /></a>' : '<a href="' + a.url + '"><span>Download File</span></a>', d.parentNode.insertBefore(e, d), d.style.display = "none", b.error(d)
        },
        createPlugin: function (a, c, d, e, f, g) {
            var h = a.htmlMediaElement,
                i = 1,
                j = 1,
                k = "me_" + a.method + "_" + b.meIndex++,
                l = new b.PluginMediaElement(k, a.method, a.url),
                m = document.createElement("div"),
                n, o, p;
            l.tagName = h.tagName;
            for (var q = 0; q < h.attributes.length; q++) {
                var r = h.attributes[q];
                r.specified == 1 && l.setAttribute(r.name, r.value)
            }
            o = h.parentNode;
            while (o !== null && o.tagName.toLowerCase() != "body") {
                if (o.parentNode.tagName.toLowerCase() == "p") {
                    o.parentNode.parentNode.insertBefore(o, o.parentNode);
                    break
                }
                o = o.parentNode
            }
            a.isVideo ? (i = c.videoWidth > 0 ? c.videoWidth : h.getAttribute("width") !== null ? h.getAttribute("width") : c.defaultVideoWidth, j = c.videoHeight > 0 ? c.videoHeight : h.getAttribute("height") !== null ? h.getAttribute("height") : c.defaultVideoHeight, i = b.Utility.encodeUrl(i), j = b.Utility.encodeUrl(j)) : c.enablePluginDebug && (i = 320, j = 240), l.success = c.success, b.MediaPluginBridge.registerPluginElement(k, l, h), m.className = "me-plugin", m.id = k + "_container", a.isVideo ? h.parentNode.insertBefore(m, h) : document.body.insertBefore(m, document.body.childNodes[0]), p = ["id=" + k, "isvideo=" + (a.isVideo ? "true" : "false"), "autoplay=" + (e ? "true" : "false"), "preload=" + f, "width=" + i, "startvolume=" + c.startVolume, "timerrate=" + c.timerRate, "flashstreamer=" + c.flashStreamer, "height=" + j], a.url !== null && (a.method == "flash" ? p.push("file=" + b.Utility.encodeUrl(a.url)) : p.push("file=" + a.url)), c.enablePluginDebug && p.push("debug=true"), c.enablePluginSmoothing && p.push("smoothing=true"), g && p.push("controls=true"), c.pluginVars && (p = p.concat(c.pluginVars));
            switch (a.method) {
            case "silverlight":
                m.innerHTML = '<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="' + k + '" name="' + k + '" width="' + i + '" height="' + j + '">' + '<param name="initParams" value="' + p.join(",") + '" />' + '<param name="windowless" value="true" />' + '<param name="background" value="black" />' + '<param name="minRuntimeVersion" value="3.0.0.0" />' + '<param name="autoUpgrade" value="true" />' + '<param name="source" value="' + c.pluginPath + c.silverlightName + '" />' + "</object>";
                break;
            case "flash":
                b.MediaFeatures.isIE ? (n = document.createElement("div"), m.appendChild(n), n.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="' + k + '" width="' + i + '" height="' + j + '">' + '<param name="movie" value="' + c.pluginPath + c.flashName + "?x=" + new Date + '" />' + '<param name="flashvars" value="' + p.join("&amp;") + '" />' + '<param name="quality" value="high" />' + '<param name="bgcolor" value="#000000" />' + '<param name="wmode" value="transparent" />' + '<param name="allowScriptAccess" value="always" />' + '<param name="allowFullScreen" value="true" />' + "</object>") : m.innerHTML = '<embed id="' + k + '" name="' + k + '" ' + 'play="true" ' + 'loop="false" ' + 'quality="high" ' + 'bgcolor="#000000" ' + 'wmode="transparent" ' + 'allowScriptAccess="always" ' + 'allowFullScreen="true" ' + 'type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" ' + 'src="' + c.pluginPath + c.flashName + '" ' + 'flashvars="' + p.join("&") + '" ' + 'width="' + i + '" ' + 'height="' + j + '"></embed>';
                break;
            case "youtube":
                var s = a.url.substr(a.url.lastIndexOf("=") + 1);
                youtubeSettings = {
                    container: m,
                    containerId: m.id,
                    pluginMediaElement: l,
                    pluginId: k,
                    videoId: s,
                    height: j,
                    width: i
                }, b.PluginDetector.hasPluginVersion("flash", [10, 0, 0]) ? b.YouTubeApi.createFlash(youtubeSettings) : b.YouTubeApi.enqueueIframe(youtubeSettings);
                break;
            case "vimeo":
                l.vimeoid = a.url.substr(a.url.lastIndexOf("/") + 1), m.innerHTML = '<object width="' + i + '" height="' + j + '">' + '<param name="allowfullscreen" value="true" />' + '<param name="allowscriptaccess" value="always" />' + '<param name="flashvars" value="api=1" />' + '<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=' + l.vimeoid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" />' + '<embed src="//vimeo.com/moogaloop.swf?api=1&amp;clip_id=' + l.vimeoid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="' + i + '" height="' + j + '"></embed>' + "</object>"
            }
            return h.style.display = "none", l
        },
        updateNative: function (a, c, d, e) {
            var f = a.htmlMediaElement,
                g;
            for (g in b.HtmlMediaElement) f[g] = b.HtmlMediaElement[g];
            return c.success(f, f), f
        }
    }, b.YouTubeApi = {
        isIframeStarted: !1,
        isIframeLoaded: !1,
        loadIframeApi: function () {
            if (!this.isIframeStarted) {
                var a = document.createElement("script");
                a.src = "http://www.youtube.com/player_api";
                var b = document.getElementsByTagName("script")[0];
                b.parentNode.insertBefore(a, b), this.isIframeStarted = !0
            }
        },
        iframeQueue: [],
        enqueueIframe: function (a) {
            this.isLoaded ? this.createIframe(a) : (this.loadIframeApi(), this.iframeQueue.push(a))
        },
        createIframe: function (a) {
            var c = a.pluginMediaElement,
                d = new YT.Player(a.containerId, {
                    height: a.height,
                    width: a.width,
                    videoId: a.videoId,
                    playerVars: {
                        controls: 0
                    },
                    events: {
                        onReady: function () {
                            a.pluginMediaElement.pluginApi = d, b.MediaPluginBridge.initPlugin(a.pluginId), setInterval(function () {
                                b.YouTubeApi.createEvent(d, c, "timeupdate")
                            }, 250)
                        },
                        onStateChange: function (a) {
                            b.YouTubeApi.handleStateChange(a.data, d, c)
                        }
                    }
                })
        },
        createEvent: function (a, b, c) {
            var d = {
                type: c,
                target: b
            };
            if (a && a.getDuration) {
                b.currentTime = d.currentTime = a.getCurrentTime(), b.duration = d.duration = a.getDuration(), d.paused = b.paused, d.ended = b.ended, d.muted = a.isMuted(), d.volume = a.getVolume() / 100, d.bytesTotal = a.getVideoBytesTotal(), d.bufferedBytes = a.getVideoBytesLoaded();
                var e = d.bufferedBytes / d.bytesTotal * d.duration;
                d.target.buffered = d.buffered = {
                    start: function (a) {
                        return 0
                    },
                    end: function (a) {
                        return e
                    },
                    length: 1
                }
            }
            b.dispatchEvent(d.type, d)
        },
        iFrameReady: function () {
            this.isLoaded = !0, this.isIframeLoaded = !0;
            while (this.iframeQueue.length > 0) {
                var a = this.iframeQueue.pop();
                this.createIframe(a)
            }
        },
        flashPlayers: {},
        createFlash: function (a) {
            this.flashPlayers[a.pluginId] = a;
            var c, d = "http://www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid=" + a.pluginId + "&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0";
            b.MediaFeatures.isIE ? (c = document.createElement("div"), a.container.appendChild(c), c.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="' + a.pluginId + '" width="' + a.width + '" height="' + a.height + '">' + '<param name="movie" value="' + d + '" />' + '<param name="wmode" value="transparent" />' + '<param name="allowScriptAccess" value="always" />' + '<param name="allowFullScreen" value="true" />' + "</object>") : a.container.innerHTML = '<object type="application/x-shockwave-flash" id="' + a.pluginId + '" data="' + d + '" ' + 'width="' + a.width + '" height="' + a.height + '" style="visibility: visible; ">' + '<param name="allowScriptAccess" value="always">' + '<param name="wmode" value="transparent">' + "</object>"
        },
        flashReady: function (a) {
            var c = this.flashPlayers[a],
                d = document.getElementById(a),
                e = c.pluginMediaElement;
            e.pluginApi = e.pluginElement = d, b.MediaPluginBridge.initPlugin(a), d.cueVideoById(c.videoId);
            var f = c.containerId + "_callback";
            window[f] = function (a) {
                b.YouTubeApi.handleStateChange(a, d, e)
            }, d.addEventListener("onStateChange", f), setInterval(function () {
                b.YouTubeApi.createEvent(d, e, "timeupdate")
            }, 250)
        },
        handleStateChange: function (a, c, d) {
            switch (a) {
            case -1:
                d.paused = !0, d.ended = !0, b.YouTubeApi.createEvent(c, d, "loadedmetadata");
                break;
            case 0:
                d.paused = !1, d.ended = !0, b.YouTubeApi.createEvent(c, d, "ended");
                break;
            case 1:
                d.paused = !1, d.ended = !1, b.YouTubeApi.createEvent(c, d, "play"), b.YouTubeApi.createEvent(c, d, "playing");
                break;
            case 2:
                d.paused = !0, d.ended = !1, b.YouTubeApi.createEvent(c, d, "pause");
                break;
            case 3:
                b.YouTubeApi.createEvent(c, d, "progress");
                break;
            case 5:
            }
        }
    }, window.mejs = b, window.MediaElement = b.MediaElement, typeof a != "undefined" ? b.$ = a : typeof ender != "undefined" && (b.$ = ender), function (c) {
        b.MepDefaults = {
            poster: "",
            defaultVideoWidth: 480,
            defaultVideoHeight: 270,
            videoWidth: -1,
            videoHeight: -1,
            defaultAudioWidth: 400,
            defaultAudioHeight: 30,
            defaultSeekBackwardInterval: function (a) {
                return a.duration * .05
            },
            defaultSeekForwardInterval: function (a) {
                return a.duration * .05
            },
            audioWidth: -1,
            audioHeight: -1,
            startVolume: .8,
            loop: !1,
            enableAutosize: !0,
            alwaysShowHours: !1,
            showTimecodeFrameCount: !1,
            framesPerSecond: 25,
            autosizeProgress: !0,
            alwaysShowControls: !1,
            iPadUseNativeControls: !1,
            iPhoneUseNativeControls: !1,
            AndroidUseNativeControls: !1,
            features: ["playpause", "current", "progress", "duration", "tracks", "volume", "fullscreen"],
            isVideo: !0,
            enableKeyboard: !0,
            pauseOtherPlayers: !0,
            keyActions: [{
                keys: [32, 179],
                action: function (a, b) {
                    b.paused || b.ended ? b.play() : b.pause()
                }
            }, {
                keys: [38],
                action: function (a, b) {
                    var c = Math.min(b.volume + .1, 1);
                    b.setVolume(c)
                }
            }, {
                keys: [40],
                action: function (a, b) {
                    var c = Math.max(b.volume - .1, 0);
                    b.setVolume(c)
                }
            }, {
                keys: [37, 227],
                action: function (a, b) {
                    if (!isNaN(b.duration) && b.duration > 0) {
                        a.isVideo && (a.showControls(), a.startControlsTimer());
                        var c = Math.max(b.currentTime - a.options.defaultSeekBackwardInterval(b), 0);
                        b.setCurrentTime(c)
                    }
                }
            }, {
                keys: [39, 228],
                action: function (a, b) {
                    if (!isNaN(b.duration) && b.duration > 0) {
                        a.isVideo && (a.showControls(), a.startControlsTimer());
                        var c = Math.min(b.currentTime + a.options.defaultSeekForwardInterval(b), b.duration);
                        b.setCurrentTime(c)
                    }
                }
            }, {
                keys: [70],
                action: function (a, b) {
                    typeof a.enterFullScreen != "undefined" && (a.isFullScreen ? a.exitFullScreen() : a.enterFullScreen())
                }
            }]
        }, b.mepIndex = 0, b.players = [], b.MediaElementPlayer = function (a, d) {
            if (this instanceof b.MediaElementPlayer) {
                var e = this;
                return e.$media = e.$node = c(a), e.node = e.media = e.$media[0], typeof e.node.player != "undefined" ? e.node.player : (e.node.player = e, typeof d == "undefined" && (d = e.$node.data("mejsoptions")), e.options = c.extend({}, b.MepDefaults, d), b.players.push(e), e.init(), e)
            }
            return new b.MediaElementPlayer(a, d)
        }, b.MediaElementPlayer.prototype = {
            hasFocus: !1,
            controlsAreVisible: !0,
            init: function () {
                var a = this,
                    d = b.MediaFeatures,
                    e = c.extend(!0, {}, a.options, {
                        success: function (b, c) {
                            a.meReady(b, c)
                        },
                        error: function (b) {
                            a.handleError(b)
                        }
                    }),
                    f = a.media.tagName.toLowerCase();
                a.isDynamic = f !== "audio" && f !== "video", a.isDynamic ? a.isVideo = a.options.isVideo : a.isVideo = f !== "audio" && a.options.isVideo;
                if (d.isiPad && a.options.iPadUseNativeControls || d.isiPhone && a.options.iPhoneUseNativeControls) a.$media.attr("controls", "controls"), d.isiPad && a.media.getAttribute("autoplay") !== null && (a.media.load(), a.media.play());
                else if (!d.isAndroid || !a.AndroidUseNativeControls) {
                    a.$media.removeAttr("controls"), a.id = "mep_" + b.mepIndex++, a.container = c('<div id="' + a.id + '" class="mejs-container">' + '<div class="mejs-inner">' + '<div class="mejs-mediaelement"></div>' + '<div class="mejs-layers"></div>' + '<div class="mejs-controls"></div>' + '<div class="mejs-clear"></div>' + "</div>" + "</div>").addClass(a.$media[0].className).insertBefore(a.$media), a.container.addClass((d.isAndroid ? "mejs-android " : "") + (d.isiOS ? "mejs-ios " : "") + (d.isiPad ? "mejs-ipad " : "") + (d.isiPhone ? "mejs-iphone " : "") + (a.isVideo ? "mejs-video " : "mejs-audio "));
                    if (d.isiOS) {
                        var g = a.$media.clone();
                        a.container.find(".mejs-mediaelement").append(g), a.$media.remove(), a.$node = a.$media = g, a.node = a.media = g[0]
                    } else a.container.find(".mejs-mediaelement").append(a.$media);
                    a.controls = a.container.find(".mejs-controls"), a.layers = a.container.find(".mejs-layers");
                    var h = a.isVideo ? "video" : "audio",
                        i = h.substring(0, 1).toUpperCase() + h.substring(1);
                    a.options[h + "Width"] > 0 || a.options[h + "Width"].toString().indexOf("%") > -1 ? a.width = a.options[h + "Width"] : a.media.style.width !== "" && a.media.style.width !== null ? a.width = a.media.style.width : a.media.getAttribute("width") !== null ? a.width = a.$media.attr("width") : a.width = a.options["default" + i + "Width"], a.options[h + "Height"] > 0 || a.options[h + "Height"].toString().indexOf("%") > -1 ? a.height = a.options[h + "Height"] : a.media.style.height !== "" && a.media.style.height !== null ? a.height = a.media.style.height : a.$media[0].getAttribute("height") !== null ? a.height = a.$media.attr("height") : a.height = a.options["default" + i + "Height"], a.setPlayerSize(a.width, a.height), e.pluginWidth = a.height, e.pluginHeight = a.width
                }
                b.MediaElement(a.$media[0], e)
            },
            showControls: function (a) {
                var b = this;
                a = typeof a == "undefined" || a;
                if (b.controlsAreVisible) return;
                a ? (b.controls.css("visibility", "visible").stop(!0, !0).fadeIn(200, function () {
                    b.controlsAreVisible = !0
                }), b.container.find(".mejs-control").css("visibility", "visible").stop(!0, !0).fadeIn(200, function () {
                    b.controlsAreVisible = !0
                })) : (b.controls.css("visibility", "visible").css("display", "block"), b.container.find(".mejs-control").css("visibility", "visible").css("display", "block"), b.controlsAreVisible = !0), b.setControlsSize()
            },
            hideControls: function (a) {
                var b = this;
                a = typeof a == "undefined" || a;
                if (!b.controlsAreVisible) return;
                a ? (b.controls.stop(!0, !0).fadeOut(200, function () {
                    c(this).css("visibility", "hidden").css("display", "block"), b.controlsAreVisible = !1
                }), b.container.find(".mejs-control").stop(!0, !0).fadeOut(200, function () {
                    c(this).css("visibility", "hidden").css("display", "block")
                })) : (b.controls.css("visibility", "hidden").css("display", "block"), b.container.find(".mejs-control").css("visibility", "hidden").css("display", "block"), b.controlsAreVisible = !1)
            },
            controlsTimer: null,
            startControlsTimer: function (a) {
                var b = this;
                a = typeof a != "undefined" ? a : 1500, b.killControlsTimer("start"), b.controlsTimer = setTimeout(function () {
                    b.hideControls(), b.killControlsTimer("hide")
                }, a)
            },
            killControlsTimer: function (a) {
                var b = this;
                b.controlsTimer !== null && (clearTimeout(b.controlsTimer), delete b.controlsTimer, b.controlsTimer = null)
            },
            controlsEnabled: !0,
            disableControls: function () {
                var a = this;
                a.killControlsTimer(), a.hideControls(!1), this.controlsEnabled = !1
            },
            enableControls: function () {
                var a = this;
                a.showControls(!1), a.controlsEnabled = !0
            },
            meReady: function (a, d) {
                var e = this,
                    f = b.MediaFeatures,
                    g = d.getAttribute("autoplay"),
                    h = typeof g != "undefined" && g !== null && g !== "false",
                    i, j;
                if (e.created) return;
                e.created = !0, e.media = a, e.domNode = d;
                if ((!f.isAndroid || !e.options.AndroidUseNativeControls) && (!f.isiPad || !e.options.iPadUseNativeControls) && (!f.isiPhone || !e.options.iPhoneUseNativeControls)) {
                    e.buildposter(e, e.controls, e.layers, e.media), e.buildkeyboard(e, e.controls, e.layers, e.media), e.buildoverlays(e, e.controls, e.layers, e.media), e.findTracks();
                    for (i in e.options.features) {
                        j = e.options.features[i];
                        if (e["build" + j]) try {
                            e["build" + j](e, e.controls, e.layers, e.media)
                        } catch (k) {}
                    }
                    e.container.trigger("controlsready"), e.setPlayerSize(e.width, e.height), e.setControlsSize();
                    if (e.isVideo) {
                        if (b.MediaFeatures.hasTouch) e.$media.bind("touchstart", function () {
                            e.controlsAreVisible ? e.hideControls(!1) : e.controlsEnabled && e.showControls(!1)
                        });
                        else {
                            var l = e.media.pluginType == "native" ? e.$media : c(e.media.pluginElement);
                            l.click(function () {
                                a.paused ? a.play() : a.pause()
                            }), e.container.bind("mouseenter mouseover", function () {
                                e.controlsEnabled && (e.options.alwaysShowControls || (e.killControlsTimer("enter"), e.showControls(), e.startControlsTimer(2500)))
                            }).bind("mousemove", function () {
                                e.controlsEnabled && (e.controlsAreVisible || e.showControls(), e.options.alwaysShowControls || e.startControlsTimer(2500))
                            }).bind("mouseleave", function () {
                                e.controlsEnabled && !e.media.paused && !e.options.alwaysShowControls && e.startControlsTimer(1e3)
                            })
                        }
                        h && !e.options.alwaysShowControls && e.hideControls(), e.options.enableAutosize && e.media.addEventListener("loadedmetadata", function (a) {
                            e.options.videoHeight <= 0 && e.domNode.getAttribute("height") === null && !isNaN(a.target.videoHeight) && (e.setPlayerSize(a.target.videoWidth, a.target.videoHeight), e.setControlsSize(), e.media.setVideoSize(a.target.videoWidth, a.target.videoHeight))
                        }, !1)
                    }
                    a.addEventListener("play", function () {
                        for (var a = 0, c = b.players.length; a < c; a++) {
                            var d = b.players[a];
                            d.id != e.id && e.options.pauseOtherPlayers && !d.paused && !d.ended && d.pause(), d.hasFocus = !1
                        }
                        e.hasFocus = !0
                    }, !1), e.media.addEventListener("ended", function (a) {
                        try {
                            e.media.setCurrentTime(0)
                        } catch (b) {}
                        e.media.pause(), e.setProgressRail && e.setProgressRail(), e.setCurrentRail && e.setCurrentRail(), e.options.loop ? e.media.play() : !e.options.alwaysShowControls && e.controlsEnabled && e.showControls()
                    }, !1), e.media.addEventListener("loadedmetadata", function (a) {
                        e.updateDuration && e.updateDuration(), e.updateCurrent && e.updateCurrent(), e.isFullScreen || (e.setPlayerSize(e.width, e.height), e.setControlsSize())
                    }, !1), setTimeout(function () {
                        e.setPlayerSize(e.width, e.height), e.setControlsSize()
                    }, 50), c(window).resize(function () {
                        e.isFullScreen || b.MediaFeatures.hasTrueNativeFullScreen && document.webkitIsFullScreen || e.setPlayerSize(e.width, e.height), e.setControlsSize()
                    }), e.media.pluginType == "youtube" && e.container.find(".mejs-overlay-play").hide()
                }
                h && a.pluginType == "native" && (a.load(), a.play()), e.options.success && (typeof e.options.success == "string" ? window[e.options.success](e.media, e.domNode, e) : e.options.success(e.media, e.domNode, e))
            },
            handleError: function (a) {
                var b = this;
                b.controls.hide(), b.options.error && b.options.error(a)
            },
            setPlayerSize: function (a, b) {
                var d = this;
                typeof a != "undefined" && (d.width = a), typeof b != "undefined" && (d.height = b);
                if (d.height.toString().indexOf("%") > 0 || d.$node.css("max-width") === "100%") {
                    var e = d.media.videoWidth && d.media.videoWidth > 0 ? d.media.videoWidth : d.options.defaultVideoWidth,
                        f = d.media.videoHeight && d.media.videoHeight > 0 ? d.media.videoHeight : d.options.defaultVideoHeight,
                        g = d.container.parent().width(),
                        h = parseInt(g * f / e, 10);
                    d.container.parent()[0].tagName.toLowerCase() === "body" && (g = c(window).width(), h = c(window).height()), h != 0 && (d.container.width(g).height(h), d.$media.width("100%").height("100%"), d.container.find("object, embed, iframe").width("100%").height("100%"), d.isVideo && d.media.setVideoSize && d.media.setVideoSize(g, h), d.layers.children(".mejs-layer").width("100%").height("100%"))
                } else d.container.width(d.width).height(d.height), d.layers.children(".mejs-layer").width(d.width).height(d.height)
            },
            setControlsSize: function () {
                var a = this,
                    b = 0,
                    d = 0,
                    e = a.controls.find(".mejs-time-rail"),
                    f = a.controls.find(".mejs-time-total"),
                    g = a.controls.find(".mejs-time-current"),
                    h = a.controls.find(".mejs-time-loaded"),
                    i = e.siblings();
                a.options && !a.options.autosizeProgress && (d = parseInt(e.css("width")));
                if (d === 0 || !d) i.each(function () {
                    c(this).css("position") != "absolute" && (b += c(this).outerWidth(!0))
                }), d = a.controls.width() - b - (e.outerWidth(!0) - e.width());
                e.width(d), f.width(d - (f.outerWidth(!0) - f.width())), a.setProgressRail && a.setProgressRail(), a.setCurrentRail && a.setCurrentRail()
            },
            buildposter: function (a, b, d, e) {
                var f = this,
                    g = c('<div class="mejs-poster mejs-layer"></div>').appendTo(d),
                    h = a.$media.attr("poster");
                a.options.poster !== "" && (h = a.options.poster), h !== "" && h != null ? f.setPoster(h) : g.hide(), e.addEventListener("play", function () {
                    g.hide()
                }, !1)
            },
            setPoster: function (a) {
                var b = this,
                    d = b.container.find(".mejs-poster"),
                    e = d.find("img");
                e.length == 0 && (e = c('<img width="100%" height="100%" />').appendTo(d)), e.attr("src", a)
            },
            buildoverlays: function (a, d, e, f) {
                if (!a.isVideo) return;
                var g = c('<div class="mejs-overlay mejs-layer"><div class="mejs-overlay-loading"><span></span></div></div>').hide().appendTo(e),
                    h = c('<div class="mejs-overlay mejs-layer"><div class="mejs-overlay-error"></div></div>').hide().appendTo(e),
                    i = c('<div class="mejs-overlay mejs-layer mejs-overlay-play"><div class="mejs-overlay-button"></div></div>').appendTo(e).click(function () {
                        f.paused ? f.play() : f.pause()
                    });
                f.addEventListener("play", function () {
                    i.hide(), g.hide(), d.find(".mejs-time-buffering").hide(), h.hide()
                }, !1), f.addEventListener("playing", function () {
                    i.hide(), g.hide(), d.find(".mejs-time-buffering").hide(), h.hide()
                }, !1), f.addEventListener("seeking", function () {
                    g.show(), d.find(".mejs-time-buffering").show()
                }, !1), f.addEventListener("seeked", function () {
                    g.hide(), d.find(".mejs-time-buffering").hide()
                }, !1), f.addEventListener("pause", function () {
                    b.MediaFeatures.isiPhone || i.show()
                }, !1), f.addEventListener("waiting", function () {
                    g.show(), d.find(".mejs-time-buffering").show()
                }, !1), f.addEventListener("loadeddata", function () {
                    g.show(), d.find(".mejs-time-buffering").show()
                }, !1), f.addEventListener("canplay", function () {
                    g.hide(), d.find(".mejs-time-buffering").hide()
                }, !1), f.addEventListener("error", function () {
                    g.hide(), d.find(".mejs-time-buffering").hide(), h.show(), h.find("mejs-overlay-error").html("Error loading this resource")
                }, !1)
            },
            buildkeyboard: function (a, b, d, e) {
                var f = this;
                c(document).keydown(function (b) {
                    if (a.hasFocus && a.options.enableKeyboard) for (var c = 0, d = a.options.keyActions.length; c < d; c++) {
                        var f = a.options.keyActions[c];
                        for (var g = 0, h = f.keys.length; g < h; g++) if (b.keyCode == f.keys[g]) return b.preventDefault(), f.action(a, e, b.keyCode), !1
                    }
                    return !0
                }), c(document).click(function (b) {
                    c(b.target).closest(".mejs-container").length == 0 && (a.hasFocus = !1)
                })
            },
            findTracks: function () {
                var a = this,
                    b = a.$media.find("track");
                a.tracks = [], b.each(function (b, d) {
                    d = c(d), a.tracks.push({
                        srclang: d.attr("srclang").toLowerCase(),
                        src: d.attr("src"),
                        kind: d.attr("kind"),
                        label: d.attr("label") || "",
                        entries: [],
                        isLoaded: !1
                    })
                })
            },
            changeSkin: function (a) {
                this.container[0].className = "mejs-container " + a, this.setPlayerSize(this.width, this.height), this.setControlsSize()
            },
            play: function () {
                this.media.play()
            },
            pause: function () {
                this.media.pause()
            },
            load: function () {
                this.media.load()
            },
            setMuted: function (a) {
                this.media.setMuted(a)
            },
            setCurrentTime: function (a) {
                this.media.setCurrentTime(a)
            },
            getCurrentTime: function () {
                return this.media.currentTime
            },
            setVolume: function (a) {
                this.media.setVolume(a)
            },
            getVolume: function () {
                return this.media.volume
            },
            setSrc: function (a) {
                this.media.setSrc(a)
            },
            remove: function () {
                var a = this;
                a.media.pluginType === "flash" ? a.media.remove() : a.media.pluginType === "native" && a.$media.prop("controls", !0), a.isDynamic || a.$node.insertBefore(a.container), a.container.remove()
            }
        }, typeof a != "undefined" && (a.fn.mediaelementplayer = function (a) {
            return this.each(function () {
                new b.MediaElementPlayer(this, a)
            })
        }), c(document).ready(function () {
            c(".mejs-player").mediaelementplayer()
        }), window.MediaElementPlayer = b.MediaElementPlayer
    }(b.$), function (a) {
        a.extend(b.MepDefaults, {
            playpauseText: "Play/Pause"
        }), a.extend(MediaElementPlayer.prototype, {
            buildplaypause: function (b, c, d, e) {
                var f = this,
                    g = a('<div class="mejs-button mejs-playpause-button mejs-play" ><button type="button" aria-controls="' + f.id + '" title="' + f.options.playpauseText + '"></button>' + "</div>").appendTo(c).click(function (a) {
                        return a.preventDefault(), e.paused ? e.play() : e.pause(), !1
                    });
                e.addEventListener("play", function () {
                    g.removeClass("mejs-play").addClass("mejs-pause")
                }, !1), e.addEventListener("playing", function () {
                    g.removeClass("mejs-play").addClass("mejs-pause")
                }, !1), e.addEventListener("pause", function () {
                    g.removeClass("mejs-pause").addClass("mejs-play")
                }, !1), e.addEventListener("paused", function () {
                    g.removeClass("mejs-pause").addClass("mejs-play")
                }, !1)
            }
        })
    }(b.$), function (a) {
        a.extend(b.MepDefaults, {
            stopText: "Stop"
        }), a.extend(MediaElementPlayer.prototype, {
            buildstop: function (c, d, e, f) {
                var g = this,
                    h = a('<div class="mejs-button mejs-stop-button mejs-stop"><button type="button" aria-controls="' + g.id + '" title="' + g.options.stopText + '"></button>' + "</div>").appendTo(d).click(function () {
                        f.paused || f.pause(), f.currentTime > 0 && (f.setCurrentTime(0), d.find(".mejs-time-current").width("0px"), d.find(".mejs-time-handle").css("left", "0px"), d.find(".mejs-time-float-current").html(b.Utility.secondsToTimeCode(0)), d.find(".mejs-currenttime").html(b.Utility.secondsToTimeCode(0)), e.find(".mejs-poster").show())
                    })
            }
        })
    }(b.$), function (a) {
        a.extend(MediaElementPlayer.prototype, {
            buildprogress: function (c, d, e, f) {
                a('<div class="mejs-time-rail"><span class="mejs-time-total"><span class="mejs-time-buffering"></span><span class="mejs-time-loaded"></span><span class="mejs-time-current"></span><span class="mejs-time-handle"></span><span class="mejs-time-float"><span class="mejs-time-float-current">00:00</span><span class="mejs-time-float-corner"></span></span></span></div>').appendTo(d), d.find(".mejs-time-buffering").hide();
                var g = this,
                    h = d.find(".mejs-time-total"),
                    i = d.find(".mejs-time-loaded"),
                    j = d.find(".mejs-time-current"),
                    k = d.find(".mejs-time-handle"),
                    l = d.find(".mejs-time-float"),
                    m = d.find(".mejs-time-float-current"),
                    n = function (a) {
                        var c = a.pageX,
                            d = h.offset(),
                            e = h.outerWidth(),
                            g = 0,
                            i = 0,
                            j = c - d.left;
                        c > d.left && c <= e + d.left && f.duration && (g = (c - d.left) / e, i = g <= .02 ? 0 : g * f.duration, o && f.setCurrentTime(i), b.MediaFeatures.hasTouch || (l.css("left", j), m.html(b.Utility.secondsToTimeCode(i)), l.show()))
                    },
                    o = !1,
                    p = !1;
                h.bind("mousedown", function (b) {
                    if (b.which === 1) return o = !0, n(b), a(document).bind("mousemove.dur", function (a) {
                        n(a)
                    }).bind("mouseup.dur", function (b) {
                        o = !1, l.hide(), a(document).unbind(".dur")
                    }), !1
                }).bind("mouseenter", function (c) {
                    p = !0, a(document).bind("mousemove.dur", function (a) {
                        n(a)
                    }), b.MediaFeatures.hasTouch || l.show()
                }).bind("mouseleave", function (b) {
                    p = !1, o || (a(document).unbind(".dur"), l.hide())
                }), f.addEventListener("progress", function (a) {
                    c.setProgressRail(a), c.setCurrentRail(a)
                }, !1), f.addEventListener("timeupdate", function (a) {
                    c.setProgressRail(a), c.setCurrentRail(a)
                }, !1), g.loaded = i, g.total = h, g.current = j, g.handle = k
            },
            setProgressRail: function (a) {
                var b = this,
                    c = a != undefined ? a.target : b.media,
                    d = null;
                c && c.buffered && c.buffered.length > 0 && c.buffered.end && c.duration ? d = c.buffered.end(0) / c.duration : c && c.bytesTotal != undefined && c.bytesTotal > 0 && c.bufferedBytes != undefined ? d = c.bufferedBytes / c.bytesTotal : a && a.lengthComputable && a.total != 0 && (d = a.loaded / a.total), d !== null && (d = Math.min(1, Math.max(0, d)), b.loaded && b.total && b.loaded.width(b.total.width() * d))
            },
            setCurrentRail: function () {
                var a = this;
                if (a.media.currentTime != undefined && a.media.duration && a.total && a.handle) {
                    var b = a.total.width() * a.media.currentTime / a.media.duration,
                        c = b - a.handle.outerWidth(!0) / 2;
                    a.current.width(b), a.handle.css("left", c)
                }
            }
        })
    }(b.$), function (a) {
        a.extend(b.MepDefaults, {
            duration: -1,
            timeAndDurationSeparator: " <span> | </span> "
        }), a.extend(MediaElementPlayer.prototype, {
            buildcurrent: function (b, c, d, e) {
                var f = this;
                a('<div class="mejs-time"><span class="mejs-currenttime">' + (b.options.alwaysShowHours ? "00:" : "") + (b.options.showTimecodeFrameCount ? "00:00:00" : "00:00") + "</span>" + "</div>").appendTo(c), f.currenttime = f.controls.find(".mejs-currenttime"), e.addEventListener("timeupdate", function () {
                    b.updateCurrent()
                }, !1)
            },
            buildduration: function (c, d, e, f) {
                var g = this;
                d.children().last().find(".mejs-currenttime").length > 0 ? a(g.options.timeAndDurationSeparator + '<span class="mejs-duration">' + (g.options.duration > 0 ? b.Utility.secondsToTimeCode(g.options.duration, g.options.alwaysShowHours || g.media.duration > 3600, g.options.showTimecodeFrameCount, g.options.framesPerSecond || 25) : (c.options.alwaysShowHours ? "00:" : "") + (c.options.showTimecodeFrameCount ? "00:00:00" : "00:00")) + "</span>").appendTo(d.find(".mejs-time")) : (d.find(".mejs-currenttime").parent().addClass("mejs-currenttime-container"), a('<div class="mejs-time mejs-duration-container"><span class="mejs-duration">' + (g.options.duration > 0 ? b.Utility.secondsToTimeCode(g.options.duration, g.options.alwaysShowHours || g.media.duration > 3600, g.options.showTimecodeFrameCount, g.options.framesPerSecond || 25) : (c.options.alwaysShowHours ? "00:" : "") + (c.options.showTimecodeFrameCount ? "00:00:00" : "00:00")) + "</span>" + "</div>").appendTo(d)), g.durationD = g.controls.find(".mejs-duration"), f.addEventListener("timeupdate", function () {
                    c.updateDuration()
                }, !1)
            },
            updateCurrent: function () {
                var a = this;
                a.currenttime && a.currenttime.html(b.Utility.secondsToTimeCode(a.media.currentTime, a.options.alwaysShowHours || a.media.duration > 3600, a.options.showTimecodeFrameCount, a.options.framesPerSecond || 25))
            },
            updateDuration: function () {
                var a = this;
                a.media.duration && a.durationD && a.durationD.html(b.Utility.secondsToTimeCode(a.media.duration, a.options.alwaysShowHours, a.options.showTimecodeFrameCount, a.options.framesPerSecond || 25))
            }
        })
    }(b.$), function (a) {
        a.extend(b.MepDefaults, {
            muteText: "Mute Toggle",
            hideVolumeOnTouchDevices: !0,
            audioVolume: "horizontal",
            videoVolume: "vertical"
        }), a.extend(MediaElementPlayer.prototype, {
            buildvolume: function (c, d, e, f) {
                if (b.MediaFeatures.hasTouch && this.options.hideVolumeOnTouchDevices) return;
                var g = this,
                    h = g.isVideo ? g.options.videoVolume : g.options.audioVolume,
                    i = h == "horizontal" ? a('<div class="mejs-button mejs-volume-button mejs-mute"><button type="button" aria-controls="' + g.id + '" title="' + g.options.muteText + '"></button>' + "</div>" + '<div class="mejs-horizontal-volume-slider">' + '<div class="mejs-horizontal-volume-total"></div>' + '<div class="mejs-horizontal-volume-current"></div>' + '<div class="mejs-horizontal-volume-handle"></div>' + "</div>").appendTo(d) : a('<div class="mejs-button mejs-volume-button mejs-mute"><button type="button" aria-controls="' + g.id + '" title="' + g.options.muteText + '"></button>' + '<div class="mejs-volume-slider">' + '<div class="mejs-volume-total"></div>' + '<div class="mejs-volume-current"></div>' + '<div class="mejs-volume-handle"></div>' + "</div>" + "</div>").appendTo(d),
                    j = g.container.find(".mejs-volume-slider, .mejs-horizontal-volume-slider"),
                    k = g.container.find(".mejs-volume-total, .mejs-horizontal-volume-total"),
                    l = g.container.find(".mejs-volume-current, .mejs-horizontal-volume-current"),
                    m = g.container.find(".mejs-volume-handle, .mejs-horizontal-volume-handle"),
                    n = function (a, b) {
                        if (!j.is(":visible") && typeof b != "undefined") {
                            j.show(), n(a, !0), j.hide();
                            return
                        }
                        a = Math.max(0, a), a = Math.min(a, 1), a == 0 ? i.removeClass("mejs-mute").addClass("mejs-unmute") : i.removeClass("mejs-unmute").addClass("mejs-mute");
                        if (h == "vertical") {
                            var c = k.height(),
                                d = k.position(),
                                e = c - c * a;
                            m.css("top", d.top + e - m.height() / 2), l.height(c - e), l.css("top", d.top + e)
                        } else {
                            var f = k.width(),
                                d = k.position(),
                                g = f * a;
                            m.css("left", d.left + g - m.width() / 2), l.width(g)
                        }
                    },
                    o = function (a) {
                        var b = null,
                            c = k.offset();
                        if (h == "vertical") {
                            var d = k.height(),
                                e = parseInt(k.css("top").replace(/px/, ""), 10),
                                g = a.pageY - c.top;
                            b = (d - g) / d;
                            if (c.top == 0 || c.left == 0) return
                        } else {
                            var i = k.width(),
                                j = a.pageX - c.left;
                            b = j / i
                        }
                        b = Math.max(0, b), b = Math.min(b, 1), n(b), b == 0 ? f.setMuted(!0) : f.setMuted(!1), f.setVolume(b)
                    },
                    p = !1,
                    q = !1;
                i.hover(function () {
                    j.show(), q = !0
                }, function () {
                    q = !1, !p && h == "vertical" && j.hide()
                }), j.bind("mouseover", function () {
                    q = !0
                }).bind("mousedown", function (b) {
                    return o(b), a(document).bind("mousemove.vol", function (a) {
                        o(a)
                    }).bind("mouseup.vol", function () {
                        p = !1, a(document).unbind(".vol"), !q && h == "vertical" && j.hide()
                    }), p = !0, !1
                }), i.find("button").click(function () {
                    f.setMuted(!f.muted)
                }), f.addEventListener("volumechange", function (a) {
                    p || (f.muted ? (n(0), i.removeClass("mejs-mute").addClass("mejs-unmute")) : (n(f.volume), i.removeClass("mejs-unmute").addClass("mejs-mute")))
                }, !1), g.container.is(":visible") && (n(c.options.startVolume), f.pluginType === "native" && f.setVolume(c.options.startVolume))
            }
        })
    }(b.$), function (a) {
        a.extend(b.MepDefaults, {
            usePluginFullScreen: !0,
            newWindowCallback: function () {
                return ""
            },
            fullscreenText: "Fullscreen"
        }), a.extend(MediaElementPlayer.prototype, {
            isFullScreen: !1,
            isNativeFullScreen: !1,
            docStyleOverflow: null,
            isInIframe: !1,
            buildfullscreen: function (c, d, e, f) {
                if (!c.isVideo) return;
                c.isInIframe = window.location != window.parent.location;
                if (b.MediaFeatures.hasTrueNativeFullScreen) {
                    var g = null;
                    b.MediaFeatures.hasMozNativeFullScreen ? g = a(document) : g = c.container, g.bind(b.MediaFeatures.fullScreenEventName, function (a) {
                        b.MediaFeatures.isFullScreen() ? (c.isNativeFullScreen = !0, c.setControlsSize()) : (c.isNativeFullScreen = !1, c.exitFullScreen())
                    })
                }
                var h = this,
                    i = 0,
                    j = 0,
                    k = c.container,
                    l = a('<div class="mejs-button mejs-fullscreen-button"><button type="button" aria-controls="' + h.id + '" title="' + h.options.fullscreenText + '"></button>' + "</div>").appendTo(d);
                if (h.media.pluginType === "native" || !h.options.usePluginFullScreen && !b.MediaFeatures.isFirefox) l.click(function () {
                    var a = b.MediaFeatures.hasTrueNativeFullScreen && b.MediaFeatures.isFullScreen() || c.isFullScreen;
                    a ? c.exitFullScreen() : c.enterFullScreen()
                });
                else {
                    var m = null,
                        n = function () {
                            var a = document.createElement("x"),
                                b = document.documentElement,
                                c = window.getComputedStyle,
                                d;
                            return "pointerEvents" in a.style ? (a.style.pointerEvents = "auto", a.style.pointerEvents = "x", b.appendChild(a), d = c && c(a, "").pointerEvents === "auto", b.removeChild(a), !! d) : !1
                        }();
                    if (n && !b.MediaFeatures.isOpera) {
                        var o = !1,
                            p = function () {
                                o && (q.hide(), r.hide(), s.hide(), l.css("pointer-events", ""), h.controls.css("pointer-events", ""), o = !1)
                            },
                            q = a('<div class="mejs-fullscreen-hover" />').appendTo(h.container).mouseover(p),
                            r = a('<div class="mejs-fullscreen-hover"  />').appendTo(h.container).mouseover(p),
                            s = a('<div class="mejs-fullscreen-hover"  />').appendTo(h.container).mouseover(p),
                            t = function () {
                                var a = {
                                    position: "absolute",
                                    top: 0,
                                    left: 0
                                };
                                q.css(a), r.css(a), s.css(a), q.width(h.container.width()).height(h.container.height() - h.controls.height());
                                var b = l.offset().left - h.container.offset().left;
                                fullScreenBtnWidth = l.outerWidth(!0), r.width(b).height(h.controls.height()).css({
                                    top: h.container.height() - h.controls.height()
                                }), s.width(h.container.width() - b - fullScreenBtnWidth).height(h.controls.height()).css({
                                    top: h.container.height() - h.controls.height(),
                                    left: b + fullScreenBtnWidth
                                })
                            };
                        a(document).resize(function () {
                            t()
                        }), l.mouseover(function () {
                            if (!h.isFullScreen) {
                                var a = l.offset(),
                                    b = c.container.offset();
                                f.positionFullscreenButton(a.left - b.left, a.top - b.top, !1), l.css("pointer-events", "none"), h.controls.css("pointer-events", "none"), q.show(), s.show(), r.show(), t(), o = !0
                            }
                        }), f.addEventListener("fullscreenchange", function (a) {
                            p()
                        })
                    } else l.mouseover(function () {
                        m !== null && (clearTimeout(m), delete m);
                        var a = l.offset(),
                            b = c.container.offset();
                        f.positionFullscreenButton(a.left - b.left, a.top - b.top, !0)
                    }).mouseout(function () {
                        m !== null && (clearTimeout(m), delete m), m = setTimeout(function () {
                            f.hideFullscreenButton()
                        }, 1500)
                    })
                }
                c.fullscreenBtn = l, a(document).bind("keydown", function (a) {
                    (b.MediaFeatures.hasTrueNativeFullScreen && b.MediaFeatures.isFullScreen() || h.isFullScreen) && a.keyCode == 27 && c.exitFullScreen()
                })
            },
            enterFullScreen: function () {
                var c = this;
                if (c.media.pluginType !== "native" && (b.MediaFeatures.isFirefox || c.options.usePluginFullScreen)) return;
                docStyleOverflow = document.documentElement.style.overflow, document.documentElement.style.overflow = "hidden", normalHeight = c.container.height(), normalWidth = c.container.width();
                if (c.media.pluginType === "native") if (b.MediaFeatures.hasTrueNativeFullScreen) b.MediaFeatures.requestFullScreen(c.container[0]), c.isInIframe && setTimeout(function e() {
                    c.isNativeFullScreen && (a(window).width() !== screen.width ? c.exitFullScreen() : setTimeout(e, 500))
                }, 500);
                else if (b.MediaFeatures.hasSemiNativeFullScreen) {
                    c.media.webkitEnterFullscreen();
                    return
                }
                if (c.isInIframe) {
                    var d = c.options.newWindowCallback(this);
                    if (d !== "") {
                        if (!b.MediaFeatures.hasTrueNativeFullScreen) {
                            c.pause(), window.open(d, c.id, "top=0,left=0,width=" + screen.availWidth + ",height=" + screen.availHeight + ",resizable=yes,scrollbars=no,status=no,toolbar=no");
                            return
                        }
                        setTimeout(function () {
                            c.isNativeFullScreen || (c.pause(), window.open(d, c.id, "top=0,left=0,width=" + screen.availWidth + ",height=" + screen.availHeight + ",resizable=yes,scrollbars=no,status=no,toolbar=no"))
                        }, 250)
                    }
                }
                c.container.addClass("mejs-container-fullscreen").width("100%").height("100%"), setTimeout(function () {
                    c.container.css({
                        width: "100%",
                        height: "100%"
                    }), c.setControlsSize()
                }, 500), c.pluginType === "native" ? c.$media.width("100%").height("100%") : (c.container.find("object, embed, iframe").width("100%").height("100%"), c.media.setVideoSize(a(window).width(), a(window).height())), c.layers.children("div").width("100%").height("100%"), c.fullscreenBtn && c.fullscreenBtn.removeClass("mejs-fullscreen").addClass("mejs-unfullscreen"), c.setControlsSize(), c.isFullScreen = !0
            },
            exitFullScreen: function () {
                var a = this;
                if (a.media.pluginType !== "native" && b.MediaFeatures.isFirefox) {
                    a.media.setFullscreen(!1);
                    return
                }
                b.MediaFeatures.hasTrueNativeFullScreen && (b.MediaFeatures.isFullScreen() || a.isFullScreen) && b.MediaFeatures.cancelFullScreen(), document.documentElement.style.overflow = docStyleOverflow, a.container.removeClass("mejs-container-fullscreen").width(normalWidth).height(normalHeight), a.pluginType === "native" ? a.$media.width(normalWidth).height(normalHeight) : (a.container.find("object embed").width(normalWidth).height(normalHeight), a.media.setVideoSize(normalWidth, normalHeight)), a.layers.children("div").width(normalWidth).height(normalHeight), a.fullscreenBtn.removeClass("mejs-unfullscreen").addClass("mejs-fullscreen"), a.setControlsSize(), a.isFullScreen = !1
            }
        })
    }(b.$), function (a) {
        a.extend(b.MepDefaults, {
            startLanguage: "",
            tracksText: "Captions/Subtitles"
        }), a.extend(MediaElementPlayer.prototype, {
            hasChapters: !1,
            buildtracks: function (b, c, d, e) {
                if (!b.isVideo) return;
                showAddCaptionLink = b.options.can_add_captions && window.FileReader;
                if (b.tracks.length == 0 && !showAddCaptionLink) return;
                var f = this,
                    g, h = "";
                b.chapters = a('<div class="mejs-chapters mejs-layer"></div>').prependTo(d).hide(), b.captions = a('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position"><span class="mejs-captions-text"></span></div></div>').prependTo(d).hide(), b.captionsText = b.captions.find(".mejs-captions-text"), b.captionsButton = a('<div class="mejs-button mejs-captions-button"><button type="button" aria-controls="' + f.id + '" title="' + f.options.tracksText + '"></button>' + '<div class="mejs-captions-selector">' + "<ul>" + "<li>" + '<input type="radio" name="' + b.id + '_captions" id="' + b.id + '_captions_none" value="none" checked="checked" />' + '<label for="' + b.id + '_captions_none">None</label>' + "</li>" + "</ul>" + "</div>" + "</div>").appendTo(c).hover(function () {
                    a(this).find(".mejs-captions-selector").css("visibility", "visible")
                }, function () {
                    a(this).find(".mejs-captions-selector").css("visibility", "hidden")
                }).delegate("input[type=radio]", "click", function () {
                    lang = this.value;
                    if (lang == "none") b.selectedTrack = null;
                    else for (g = 0; g < b.tracks.length; g++) if (b.tracks[g].srclang == lang) {
                        b.selectedTrack = b.tracks[g], b.captions.attr("lang", b.selectedTrack.srclang), b.displayCaptions();
                        break
                    }
                }), b.options.alwaysShowControls ? b.container.find(".mejs-captions-position").addClass("mejs-captions-position-hover") : b.container.bind("mouseenter", function () {
                    b.container.find(".mejs-captions-position").addClass("mejs-captions-position-hover")
                }).bind("mouseleave", function () {
                    e.paused || b.container.find(".mejs-captions-position").removeClass("mejs-captions-position-hover")
                }), b.trackToLoad = -1, b.selectedTrack = null, b.isLoadingTrack = !1;
                for (g = 0; g < b.tracks.length; g++) b.tracks[g].kind == "subtitles" && b.addTrackButton(b.tracks[g].srclang, b.tracks[g].label, b.tracks[g].src);
                showAddCaptionLink && b.addUploadTrackButton(), b.loadNextTrack(), e.addEventListener("timeupdate", function (a) {
                    b.displayCaptions()
                }, !1), e.addEventListener("loadedmetadata", function (a) {
                    b.displayChapters()
                }, !1), b.container.hover(function () {
                    b.hasChapters && (b.chapters.css("visibility", "visible"), b.chapters.fadeIn(200).height(b.chapters.find(".mejs-chapter").outerHeight()))
                }, function () {
                    b.hasChapters && !e.paused && b.chapters.fadeOut(200, function () {
                        a(this).css("visibility", "hidden"), a(this).css("display", "block")
                    })
                }), b.node.getAttribute("autoplay") !== null && b.chapters.css("visibility", "hidden")
            },
            loadNextTrack: function () {
                var a = this;
                a.trackToLoad++, a.trackToLoad < a.tracks.length ? (a.isLoadingTrack = !0, a.loadTrack(a.trackToLoad)) : a.isLoadingTrack = !1
            },
            loadTrack: function (c) {
                var d = this,
                    e = d.tracks[c],
                    f = function () {
                        e.isLoaded = !0, d.enableTrackButton(e.srclang, e.label), d.loadNextTrack()
                    };
                a.ajax({
                    url: e.src,
                    dataType: "text",
                    success: function (a) {
                        typeof a == "string" && /<tt\s+xml/ig.exec(a) ? e.entries = b.TrackFormatParser.dfxp.parse(a) : e.entries = b.TrackFormatParser.webvvt.parse(a), f(), e.kind == "chapters" && d.media.duration > 0 && d.drawChapters(e)
                    },
                    error: function () {
                        d.loadNextTrack()
                    }
                })
            },
            enableTrackButton: function (c, d) {
                var e = this;
                d === "" && (d = b.language.codes[c] || c), e.captionsButton.find("input[value=" + c + "]").prop("disabled", !1).siblings("label").html(d), e.options.startLanguage == c && a("#" + e.id + "_captions_" + c).click(), e.adjustLanguageBox()
            },
            addUploadTrackButton: function () {
                var b = this;
                a('<a href="#" style="color:white">Upload subtitles</a>').appendTo(b.captionsButton.find("ul")).wrap("<li>").click(function (a) {
                    a.preventDefault(), require(["compiled/widget/UploadMediaTrackForm"], function (a) {
                        new a(b.options.mediaCommentId, b.media.src)
                    })
                }), b.adjustLanguageBox()
            },
            addTrackButton: function (c, d, e) {
                var f = this;
                d === "" && (d = b.language.codes[c] || c);
                var g = "";
                f.options.can_add_captions && (g = '<a href="#" data-remove="li" data-confirm="Are you sure you want to delete this track?" data-url="' + e + '">×</a>'), f.captionsButton.find("ul").append(a('<li><input type="radio" name="' + f.id + '_captions" id="' + f.id + "_captions_" + c + '" value="' + c + '" disabled="disabled" />' + '<label for="' + f.id + "_captions_" + c + '">' + d + " (loading)" + "</label>" + g + "</li>")), f.adjustLanguageBox(), f.container.find(".mejs-captions-translations option[value=" + c + "]").remove()
            },
            adjustLanguageBox: function () {
                var a = this;
                a.captionsButton.find(".mejs-captions-selector").height(a.captionsButton.find(".mejs-captions-selector ul").outerHeight(!0) + a.captionsButton.find(".mejs-captions-translations").outerHeight(!0))
            },
            displayCaptions: function () {
                if (typeof this.tracks == "undefined") return;
                var a = this,
                    b, c = a.selectedTrack;
                if (c != null && c.isLoaded) {
                    for (b = 0; b < c.entries.times.length; b++) if (a.media.currentTime >= c.entries.times[b].start && a.media.currentTime <= c.entries.times[b].stop) {
                        a.captionsText.html(c.entries.text[b]), a.captions.show().height(0);
                        return
                    }
                    a.captions.hide()
                } else a.captions.hide()
            },
            displayChapters: function () {
                var a = this,
                    b;
                for (b = 0; b < a.tracks.length; b++) if (a.tracks[b].kind == "chapters" && a.tracks[b].isLoaded) {
                    a.drawChapters(a.tracks[b]), a.hasChapters = !0;
                    break
                }
            },
            drawChapters: function (c) {
                var d = this,
                    e, f, g = 0,
                    h = 0;
                d.chapters.empty();
                for (e = 0; e < c.entries.times.length; e++) {
                    f = c.entries.times[e].stop - c.entries.times[e].start, g = Math.floor(f / d.media.duration * 100);
                    if (g + h > 100 || e == c.entries.times.length - 1 && g + h < 100) g = 100 - h;
                    d.chapters.append(a('<div class="mejs-chapter" rel="' + c.entries.times[e].start + '" style="left: ' + h.toString() + "%;width: " + g.toString() + '%;">' + '<div class="mejs-chapter-block' + (e == c.entries.times.length - 1 ? " mejs-chapter-block-last" : "") + '">' + '<span class="ch-title">' + c.entries.text[e] + "</span>" + '<span class="ch-time">' + b.Utility.secondsToTimeCode(c.entries.times[e].start) + "&ndash;" + b.Utility.secondsToTimeCode(c.entries.times[e].stop) + "</span>" + "</div>" + "</div>")), h += g
                }
                d.chapters.find("div.mejs-chapter").click(function () {
                    d.media.setCurrentTime(parseFloat(a(this).attr("rel"))), d.media.paused && d.media.play()
                }), d.chapters.show()
            }
        }), b.language = {
            codes: {
                af: "Afrikaans",
                sq: "Albanian",
                ar: "Arabic",
                be: "Belarusian",
                bg: "Bulgarian",
                ca: "Catalan",
                zh: "Chinese",
                "zh-cn": "Chinese Simplified",
                "zh-tw": "Chinese Traditional",
                hr: "Croatian",
                cs: "Czech",
                da: "Danish",
                nl: "Dutch",
                en: "English",
                et: "Estonian",
                tl: "Filipino",
                fi: "Finnish",
                fr: "French",
                gl: "Galician",
                de: "German",
                el: "Greek",
                ht: "Haitian Creole",
                iw: "Hebrew",
                hi: "Hindi",
                hu: "Hungarian",
                is: "Icelandic",
                id: "Indonesian",
                ga: "Irish",
                it: "Italian",
                ja: "Japanese",
                ko: "Korean",
                lv: "Latvian",
                lt: "Lithuanian",
                mk: "Macedonian",
                ms: "Malay",
                mt: "Maltese",
                no: "Norwegian",
                fa: "Persian",
                pl: "Polish",
                pt: "Portuguese",
                ro: "Romanian",
                ru: "Russian",
                sr: "Serbian",
                sk: "Slovak",
                sl: "Slovenian",
                es: "Spanish",
                sw: "Swahili",
                sv: "Swedish",
                tl: "Tagalog",
                th: "Thai",
                tr: "Turkish",
                uk: "Ukrainian",
                vi: "Vietnamese",
                cy: "Welsh",
                yi: "Yiddish"
            }
        }, b.TrackFormatParser = {
            webvvt: {
                pattern_identifier: /^([a-zA-z]+-)?[0-9]+$/,
                pattern_timecode: /^([0-9]{2}:[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ([0-9]{2}:[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/,
                parse: function (c) {
                    var d = 0,
                        e = b.TrackFormatParser.split2(c, /\r?\n/),
                        f = {
                            text: [],
                            times: []
                        },
                        g, h;
                    for (; d < e.length; d++) if (this.pattern_identifier.exec(e[d])) {
                        d++, g = this.pattern_timecode.exec(e[d]);
                        if (g && d < e.length) {
                            d++, h = e[d], d++;
                            while (e[d] !== "" && d < e.length) h = h + "\n" + e[d], d++;
                            h = a.trim(h).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>"), f.text.push(h), f.times.push({
                                start: b.Utility.convertSMPTEtoSeconds(g[1]) == 0 ? .2 : b.Utility.convertSMPTEtoSeconds(g[1]),
                                stop: b.Utility.convertSMPTEtoSeconds(g[3]),
                                settings: g[5]
                            })
                        }
                    }
                    return f
                }
            },
            dfxp: {
                parse: function (c) {
                    c = a(c).filter("tt");
                    var d = 0,
                        e = c.children("div").eq(0),
                        f = e.find("p"),
                        g = c.find("#" + e.attr("style")),
                        h, i, j, k, l = {
                            text: [],
                            times: []
                        };
                    if (g.length) {
                        var m = g.removeAttr("id").get(0).attributes;
                        if (m.length) {
                            h = {};
                            for (d = 0; d < m.length; d++) h[m[d].name.split(":")[1]] = m[d].value
                        }
                    }
                    for (d = 0; d < f.length; d++) {
                        var n, o = {
                            start: null,
                            stop: null,
                            style: null
                        };
                        f.eq(d).attr("begin") && (o.start = b.Utility.convertSMPTEtoSeconds(f.eq(d).attr("begin"))), !o.start && f.eq(d - 1).attr("end") && (o.start = b.Utility.convertSMPTEtoSeconds(f.eq(d - 1).attr("end"))), f.eq(d).attr("end") && (o.stop = b.Utility.convertSMPTEtoSeconds(f.eq(d).attr("end"))), !o.stop && f.eq(d + 1).attr("begin") && (o.stop = b.Utility.convertSMPTEtoSeconds(f.eq(d + 1).attr("begin")));
                        if (h) {
                            n = "";
                            for (var p in h) n += p + ":" + h[p] + ";"
                        }
                        n && (o.style = n), o.start == 0 && (o.start = .2), l.times.push(o), k = a.trim(f.eq(d).html()).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>"), l.text.push(k), l.times.start == 0 && (l.times.start = 2)
                    }
                    return l
                }
            },
            split2: function (a, b) {
                return a.split(b)
            }
        }, "x\n\ny".split(/\n/gi).length != 3 && (b.TrackFormatParser.split2 = function (a, b) {
            var c = [],
                d = "",
                e;
            for (e = 0; e < a.length; e++) d += a.substring(e, e + 1), b.test(d) && (c.push(d.replace(b, "")), d = "");
            return c.push(d), c
        })
    }(b.$), function (a) {
        a.extend(b.MepDefaults, {
            googleAnalyticsTitle: "",
            googleAnalyticsCategory: "Videos",
            googleAnalyticsEventPlay: "Play",
            googleAnalyticsEventPause: "Pause",
            googleAnalyticsEventEnded: "Ended",
            googleAnalyticsEventTime: "Time"
        }), a.extend(MediaElementPlayer.prototype, {
            buildgoogleanalytics: function (a, b, c, d) {
                d.addEventListener("play", function () {
                    typeof _gaq != "undefined" && _gaq.push(["_trackEvent", a.options.googleAnalyticsCategory, a.options.googleAnalyticsEventPlay, a.options.googleAnalyticsTitle === "" ? a.currentSrc : a.options.googleAnalyticsTitle])
                }, !1), d.addEventListener("pause", function () {
                    typeof _gaq != "undefined" && _gaq.push(["_trackEvent", a.options.googleAnalyticsCategory, a.options.googleAnalyticsEventPause, a.options.googleAnalyticsTitle === "" ? a.currentSrc : a.options.googleAnalyticsTitle])
                }, !1), d.addEventListener("ended", function () {
                    typeof _gaq != "undefined" && _gaq.push(["_trackEvent", a.options.googleAnalyticsCategory, a.options.googleAnalyticsEventEnded, a.options.googleAnalyticsTitle === "" ? a.currentSrc : a.options.googleAnalyticsTitle])
                }, !1)
            }
        })
    }(b.$), b
}), function () {
    var a = function (a, b) {
            return function () {
                return a.apply(b, arguments)
            }
        };
    define("compiled/util/kalturaAnalytics", ["jquery", "underscore", "vendor/jquery.cookie"], function (b, c) {
        var d;
        return d = function () {
            function d(b, c, d) {
                this.mediaId = b, this.mediaElement = c, this.pluginSettings = d, this.addListeners = a(this.addListeners, this), this.queueApiCall = a(this.queueApiCall, this), this.setupApiIframes = a(this.setupApiIframes, this), this.generateApiUrl = a(this.generateApiUrl, this), this.ensureAnalyticSession = a(this.ensureAnalyticSession, this), this.queueAnalyticEvent = a(this.queueAnalyticEvent, this), this.ensureAnalyticSession(), this.generateApiUrl(), this.defaultData = {
                    service: "stats",
                    action: "collect",
                    "event:entryId": this.mediaId,
                    "event:sessionId": this.kaSession,
                    "event:isFirstInSession": "false",
                    "event:objectType": "KalturaStatsEvent",
                    "event:partnerId": this.pluginSettings.partner_id,
                    "event:uiconfId": this.pluginSettings.kcw_ui_conf,
                    "event:queryStringReferrer": window.location.href
                }
            }
            return d.prototype.queueAnalyticEvent = function (a) {
                var d;
                return d = c.clone(this.defaultData), d["event:eventType"] = a, d["event:duration"] = this.mediaElement.duration, d["event:currentPoint"] = parseInt(this.mediaElement.currentTime * 1e3), d["event:eventTimestamp"] = (new Date).getTime(), this.queueApiCall(this.apiUrl + b.param(d))
            }, d.prototype.ensureAnalyticSession = function () {
                this.kaSession = b.cookie("kaltura_analytic_tracker", void 0, {
                    path: "/"
                });
                if (!this.kaSession) return this.kaSession = (Math.random().toString(16) + Math.random().toString(16) + Math.random().toString(16)).replace(/\./g, ""), b.cookie("kaltura_analytic_tracker", this.kaSession, {
                    path: "/"
                })
            }, d.prototype.generateApiUrl = function () {
                var a;
                return window.location.protocol === "http:" ? a = "http://" + this.pluginSettings.domain : a = "https://" + this.pluginSettings.domain, this.apiUrl = "" + a + "/api_v3/index.php?"
            }, d.prototype.setupApiIframes = function (a) {
                var d, e, f, g, h, i;
                this.qIndex = 0, this.iframes = [];
                for (e = h = 0, i = a - 1; 0 <= i ? h <= i : h >= i; e = 0 <= i ? ++h : --h) f = document.createElement("iframe"), b(f).addClass("hidden kaltura-analytics"), b(document.body).append(f), g = [], d = function (a, b) {
                    return function () {
                        var c;
                        if (c = b.shift()) return a.src = c
                    }
                }(f, g), this.iframes[e] = {
                    iframe: f,
                    queue: g,
                    pinger: c.throttle(d, 4e3)
                };
                return this.iframes
            }, d.prototype.queueApiCall = function (a) {
                return this.iframes || this.setupApiIframes(this.pluginSettings.parallel_api_calls || 3), this.iframes[this.qIndex].queue.push(a), this.iframes[this.qIndex].pinger(), this.qIndex = (this.qIndex + 1) % this.iframes.length, this.qIndex
            }, d.prototype.addListeners = function () {
                var a, b, c = this;
                return this.queueAnalyticEvent(1), this.mediaElement.addEventListener("play", function () {
                    return c.mediaElement.pauseObserved = !1, c.mediaElement.endedObserved = !1, c.mediaElement.endedOnce && (c.queueAnalyticEvent(mediaId, 16), c.mediaElement.endedOnce = !1), c.queueAnalyticEvent(3)
                }), this.mediaElement.addEventListener("canplay", function () {
                    return c.queueAnalyticEvent(2)
                }), this.mediaElement.addEventListener("seeked", function () {
                    if (c.mediaElement.endedObserved) return;
                    return c.queueAnalyticEvent(17)
                }), this.mediaElement.addEventListener("pause", function () {
                    if (c.mediaElement.pauseObserved) return;
                    return c.mediaElement.pauseObserved = !0
                }), this.mediaElement.addEventListener("progress", function () {
                    if (!c.mediaElement.endedOnce) return c.queueAnalyticEvent(12)
                }), b = 0, a = !1, this.mediaElement.addEventListener("playing", function (d) {
                    var e;
                    if (c.mediaElement.listeningToPlaying) return;
                    return e = setInterval(function () {
                        var d, e, f, g;
                        if (c.mediaElement.paused || isNaN(c.mediaElement.duration) || !c.mediaElement.duration) return;
                        c.mediaElement.isFullScreen !== a && (a ? c.queueAnalyticEvent(15) : c.queueAnalyticEvent(14), a = c.mediaElement.isFullScreen), g = [.25 * c.mediaElement.duration, .5 * c.mediaElement.duration, .75 * c.mediaElement.duration, .98 * c.mediaElement.duration], e = c.mediaElement.currentTime;
                        if (!isNaN(e) && e > 0) {
                            f = g.length - 1;
                            while (f >= 0) d = g[f], d > b && d <= e && (f === 0 ? c.queueAnalyticEvent(4) : f === 1 ? c.queueAnalyticEvent(5) : f === 2 ? c.queueAnalyticEvent(6) : f === 3 && c.queueAnalyticEvent(7)), --f;
                            return b = e
                        }
                    }, 50), c.mediaElement.listeningToPlaying = !0
                }, !1)
            }, d
        }(), function (a, b, c) {
            var e;
            if (c && c.do_analytics) return e = new d(a, b, c), e.addListeners(), e
        }
    })
}.call(this), function () {
    define("compiled/jquery/mediaComment", ["i18n!media_comments", "underscore", "vendor/jquery.ba-tinypubsub", "vendor/mediaelement-and-player", "jquery", "compiled/util/kalturaAnalytics"], function (a, b, c, d, e, f) {
        var g, h, i, j, k, l, m, n;
        return l = function () {
            return e("body").hasClass("ie9")
        }, m = function () {
            var a;
            return a = navigator.userAgent.toLowerCase(), a.match(/ip(hone|od|ad)/i) || a.match(/android/i)
        }, i = function () {
            return m()
        }, h = 550, g = 448, e.extend(d.MediaElementDefaults, {
            pluginPath: "/images/mediaelement/",
            defaultVideoWidth: h,
            defaultVideoHeight: g
        }), e.extend(d.MepDefaults, {
            mode: l() ? "shim" : "auto_plugin",
            success: function (a, b) {
                f(this.mediaCommentId, a, INST.kalturaSettings);
                if (a.pluginType === "flash") return a.play()
            }
        }), d.MepDefaults.features.push("googleanalytics"), k = function (a) {
            var c;
            return c = new e.Deferred, e.getJSON("/media_objects/" + a + "/info", function (a) {
                var e, f, g;
                return e = b.map(a.media_sources, function (a) {
                    return "<source type='" + a.content_type + "' src='" + a.url + "' />"
                }), f = b.map(a.media_tracks, function (a) {
                    var b;
                    return b = d.language.codes[a.locale] || a.locale, "<track kind='" + a.kind + "' label='" + b + "' src='" + a.url + "' srclang='" + a.locale + "' />"
                }), g = b.map(a.media_sources, function (a) {
                    return a.content_type
                }), c.resolve({
                    sources: e,
                    tracks: f,
                    types: g,
                    can_add_captions: a.can_add_captions
                })
            }), c
        }, j = function (a) {
            var b, c, d, f, g, h;
            return d = a.sourcesAndTracks, c = a.mediaType, b = a.height, h = a.width, g = c === "video" ? "video" : "audio", c === "audio" && d.types[0].match(/^video\//) && !i() && (g = "video", a.mediaPlayerOptions.isVideo = !1, a.mediaPlayerOptions.videoHeight = 30, b = 30), f = d.sources.concat(d.tracks).join(""), e("<" + g + " " + (c === "video" ? "width='" + h + "' height='" + b + "'" : "") + " controls>" + f + "</" + g + ">")
        }, n = {
            create: function (a, b, d, f) {
                var g, h = this;
                return e("#media_recorder_container").removeAttr("id"), this.attr("id", "media_recorder_container"), c.unsubscribe("media_comment_created"), c.subscribe("media_comment_created", function (a) {
                    return b.call(void 0, a.id, a.mediaType)
                }), g = {
                    modal: !1,
                    defaultTitle: f
                }, e.isFunction(d) && (g.close = d.bind(this)), e.mediaComment.init(a, g)
            },
            show_inline: function (b, c, d) {
                var f, g, i, l, m;
                return c == null && (c = "video"), f = e(this).closest(".instructure_file_link_holder").andSelf().first(), f.text(a.t("loading", "Loading media...")), m = function (b) {
                    var d, e;
                    return e = Math.min(f.closest("div,p,table").width() || h, h), d = Math.round(e / 336 * 240), k(b).done(function (g) {
                        var h, i, k;
                        return g.sources.length ? (i = {
                            can_add_captions: g.can_add_captions,
                            mediaCommentId: b,
                            googleAnalyticsTitle: b
                        }, h = j({
                            sourcesAndTracks: g,
                            mediaPlayerOptions: i,
                            mediaType: c,
                            height: d,
                            width: e
                        }), h.appendTo(f.html("")), k = new MediaElementPlayer(h, i), h.data("mediaelementplayer", k)) : f.text(a.t("media_still_converting", "Media is currently being converted, please try again in a little bit."))
                    })
                }, b === "maybe" ? (g = d.replace(/\/download.*/, ""), i = function () {
                    return f.text(a.t("messages.file_failed_to_load", "This media file failed to load"))
                }, l = function (a) {
                    var b;
                    return ((b = a.attachment) != null ? b.media_entry_id : void 0) !== "maybe" ? (f.text(""), m(a.attachment.media_entry_id)) : i()
                }, e.ajaxJSON(g, "GET", {}, l, i)) : m(b)
            },
            show: function (b, c) {
                var d, f, g, i, l, m;
                return f = e(this), (g = f.data("media_comment_dialog")) ? g.dialog("open") : (l = 35, c = c || "video", i = c === "video" ? 426 : 180, m = c === "video" ? h : 400, d = e('<div style="overflow: hidden; padding: 0;" />'), c === "audio" && d.css("padding-top", "120px"), d.dialog({
                    title: a.t("titles.play_comment", "Play Media Comment"),
                    width: m,
                    height: i,
                    modal: !1,
                    resizable: !1,
                    close: function () {
                        return f.data("mediaelementplayer").pause()
                    }
                }), d.disableWhileLoading(k(b).done(function (e) {
                    var g, h;
                    return e.sources.length ? (h = {
                        can_add_captions: e.can_add_captions,
                        mediaCommentId: b,
                        googleAnalyticsTitle: b
                    }, g = j({
                        sourcesAndTracks: e,
                        mediaPlayerOptions: h,
                        mediaType: c,
                        height: i - l,
                        width: m
                    }), g.appendTo(d.html("")), f.data({
                        mediaelementplayer: new MediaElementPlayer(g, h),
                        media_comment_dialog: d
                    })) : d.text(a.t("media_still_converting", "Media is currently being converted, please try again in a little bit."))
                })))
            }
        }, e.fn.mediaComment = function (a) {
            return INST.kalturaSettings ? (n[a].apply(this, Array.prototype.slice.call(arguments, 1)), this) : console.log("Kaltura has not been enabled for this account")
        }
    })
}.call(this), function () {
    define("compiled/behaviors/instructure_inline_media_comment", ["i18n!media_comments", "jquery", "compiled/fn/preventDefault", "str/htmlEscape", "compiled/jquery/mediaComment"], function (a, b, c, d) {
        return b(document).on("click", "a.instructure_inline_media_comment", c(function () {
            var e, f, g, h, i, j;
            if (!INST.kalturaSettings) return alert(a.t("alerts.kaltura_disabled", "Kaltura has been disabled for this Canvas site"));
            f = b(this), e = b("<span><span></span><br/></span>"), j = "video", h = f.data("media_comment_id") || f.find(".media_comment_id:first").text(), e.css("display", "block"), !h && (i = f.attr("id")) && i.match(/^media_comment_/) && (h = i.substring(14)), f.after(e), f.hide();
            if (f.data("media_comment_type") === "audio" || f.is(".audio_playback, .audio_comment, .instructure_audio_link")) j = "audio";
            return e.children("span").mediaComment("show_inline", h, j, f.attr("href")), g = b("<a href='#' style='font-size: 0.8em;'>                     " + d(a.t("links.minimize_embedded_kaltura_content", "Minimize embedded content")) + "                   </a>"), g.appendTo(e).click(c(function () {
                var a;
                return (a = e.find("video,audio").data("mediaelementplayer")) != null && a.pause(), e.remove(), f.show(), b.trackEvent("hide_embedded_content", "hide_media")
            })), b.trackEvent("show_embedded_content", "show_media")
        }))
    })
}.call(this), function () {
    function i(a) {
        var b = a.currentTarget || a.srcElement,
            c, g, h;
        if (a.type === "load" || d.test(b.readyState)) {
            g = b.getAttribute("data-requiremodule"), f[g] = !0;
            for (c = 0; h = e[c]; c++) {
                if (!f[h.name]) break;
                h.req([h.name], h.onLoad)
            }
            c > 0 && e.splice(0, c), setTimeout(function () {
                b.parentNode.removeChild(b)
            }, 15)
        }
    }
    function j(a) {
        var b, c, d;
        a.setAttribute("data-orderloaded", "loaded");
        for (b = 0; d = h[b]; b++) {
            c = g[d];
            if (!c || c.getAttribute("data-orderloaded") !== "loaded") break;
            delete g[d], require.addScriptToDom(c)
        }
        b > 0 && h.splice(0, b)
    }
    var a = typeof document != "undefined" && typeof window != "undefined" && document.createElement("script"),
        b = a && (a.async || window.opera && Object.prototype.toString.call(window.opera) === "[object Opera]" || "MozAppearance" in document.documentElement.style),
        c = a && a.readyState === "uninitialized",
        d = /^(complete|loaded)$/,
        e = [],
        f = {},
        g = {},
        h = [];
    a = null, define("order", {
        version: "1.0.0",
        load: function (a, d, f, k) {
            var l = d.nameToUrl(a, null),
                m, n;
            require.s.skipAsync[l] = !0, b || k.isBuild ? d([a], f) : c ? (n = require.s.contexts._, !n.urlFetched[l] && !n.loaded[a] && (n.urlFetched[l] = !0, require.resourcesReady(!1), n.scriptCount += 1, m = require.attach(l, n, a, null, null, j), g[a] = m, h.push(a)), d([a], f)) : d.specified(a) ? d([a], f) : (e.push({
                name: a,
                req: d,
                onLoad: f
            }), require.attach(l, null, a, i, "script/cache"))
        }
    })
}(), define("jqueryui/effect", ["jquery"], function (a) {
    if (a.effects) return a.effects;
    var b = a.uiBackCompat !== !1,
        c = "ui-effects-";
    a.effects = {
        effect: {}
    }, function (a, b) {
        function l(a, b, c) {
            var d = h[b.type] || {},
                e = c || b.empty;
            return e && a == null ? null : b.def && a == null ? b.def : (d.floor ? a = ~~a : a = parseFloat(a), a == null || isNaN(a) ? b.def : d.mod ? (a %= d.mod, a < 0 ? d.mod + a : a) : d.min > a ? d.min : d.max < a ? d.max : a)
        }
        function m(b) {
            var c = f(),
                d = c._rgba = [];
            return b = b.toLowerCase(), k(e, function (a, e) {
                var f = e.re.exec(b),
                    h = f && e.parse(f),
                    i, j = e.space || "rgba",
                    k = g[j].cache;
                if (h) return i = c[j](h), c[k] = i[k], d = c._rgba = i._rgba, !1
            }), d.length !== 0 ? (Math.max.apply(Math, d) === 0 && a.extend(d, j.transparent), c) : j[b]
        }
        function n(a, b, c) {
            return c = (c + 1) % 1, c * 6 < 1 ? a + (b - a) * 6 * c : c * 2 < 1 ? b : c * 3 < 2 ? a + (b - a) * (2 / 3 - c) * 6 : a
        }
        var c = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color outlineColor".split(" "),
            d = /^([\-+])=\s*(\d+\.?\d*)/,
            e = [{
                re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
                parse: function (a) {
                    return [a[1], a[2], a[3], a[4]]
                }
            }, {
                re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
                parse: function (a) {
                    return [2.55 * a[1], 2.55 * a[2], 2.55 * a[3], a[4]]
                }
            }, {
                re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
                parse: function (a) {
                    return [parseInt(a[1], 16), parseInt(a[2], 16), parseInt(a[3], 16)]
                }
            }, {
                re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,
                parse: function (a) {
                    return [parseInt(a[1] + a[1], 16), parseInt(a[2] + a[2], 16), parseInt(a[3] + a[3], 16)]
                }
            }, {
                re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
                space: "hsla",
                parse: function (a) {
                    return [a[1], a[2] / 100, a[3] / 100, a[4]]
                }
            }],
            f = a.Color = function (b, c, d, e) {
                return new a.Color.fn.parse(b, c, d, e)
            },
            g = {
                rgba: {
                    cache: "_rgba",
                    props: {
                        red: {
                            idx: 0,
                            type: "byte",
                            empty: !0
                        },
                        green: {
                            idx: 1,
                            type: "byte",
                            empty: !0
                        },
                        blue: {
                            idx: 2,
                            type: "byte",
                            empty: !0
                        },
                        alpha: {
                            idx: 3,
                            type: "percent",
                            def: 1
                        }
                    }
                },
                hsla: {
                    cache: "_hsla",
                    props: {
                        hue: {
                            idx: 0,
                            type: "degrees",
                            empty: !0
                        },
                        saturation: {
                            idx: 1,
                            type: "percent",
                            empty: !0
                        },
                        lightness: {
                            idx: 2,
                            type: "percent",
                            empty: !0
                        }
                    }
                }
            },
            h = {
                "byte": {
                    floor: !0,
                    min: 0,
                    max: 255
                },
                percent: {
                    min: 0,
                    max: 1
                },
                degrees: {
                    mod: 360,
                    floor: !0
                }
            },
            i = f.support = {},
            j, k = a.each;
        g.hsla.props.alpha = g.rgba.props.alpha, f.fn = a.extend(f.prototype, {
            parse: function (c, d, e, h) {
                if (c === b) return this._rgba = [null, null, null, null], this;
                if (c.jquery || c.nodeType) c = a(c).css(d), d = b;
                var i = this,
                    n = a.type(c),
                    o = this._rgba = [],
                    p;
                d !== b && (c = [c, d, e, h], n = "array");
                if (n === "string") return this.parse(m(c) || j._default);
                if (n === "array") return k(g.rgba.props, function (a, b) {
                    o[b.idx] = l(c[b.idx], b)
                }), this;
                if (n === "object") return c instanceof f ? k(g, function (a, b) {
                    c[b.cache] && (i[b.cache] = c[b.cache].slice())
                }) : k(g, function (a, b) {
                    k(b.props, function (a, d) {
                        var e = b.cache;
                        if (!i[e] && b.to) {
                            if (c[a] == null || a === "alpha") return;
                            i[e] = b.to(i._rgba)
                        }
                        i[e][d.idx] = l(c[a], d, !0)
                    })
                }), this
            },
            is: function (a) {
                var b = f(a),
                    c = !0,
                    d = this;
                return k(g, function (a, e) {
                    var f = b[e.cache],
                        g;
                    return f && (g = d[e.cache] || e.to && e.to(d._rgba) || [], k(e.props, function (a, b) {
                        if (f[b.idx] != null) return c = f[b.idx] === g[b.idx], c
                    })), c
                }), c
            },
            _space: function () {
                var a = [],
                    b = this;
                return k(g, function (c, d) {
                    b[d.cache] && a.push(c)
                }), a.pop()
            },
            transition: function (a, b) {
                var c = f(a),
                    d = c._space(),
                    e = g[d],
                    i = this[e.cache] || e.to(this._rgba),
                    j = i.slice();
                return c = c[e.cache], k(e.props, function (a, d) {
                    var e = d.idx,
                        f = i[e],
                        g = c[e],
                        k = h[d.type] || {};
                    if (g === null) return;
                    f === null ? j[e] = g : (k.mod && (g - f > k.mod / 2 ? f += k.mod : f - g > k.mod / 2 && (f -= k.mod)), j[d.idx] = l((g - f) * b + f, d))
                }), this[d](j)
            },
            blend: function (b) {
                if (this._rgba[3] === 1) return this;
                var c = this._rgba.slice(),
                    d = c.pop(),
                    e = f(b)._rgba;
                return f(a.map(c, function (a, b) {
                    return (1 - d) * e[b] + d * a
                }))
            },
            toRgbaString: function () {
                var b = "rgba(",
                    c = a.map(this._rgba, function (a, b) {
                        return a == null ? b > 2 ? 1 : 0 : a
                    });
                return c[3] === 1 && (c.pop(), b = "rgb("), b + c.join(",") + ")"
            },
            toHslaString: function () {
                var b = "hsla(",
                    c = a.map(this.hsla(), function (a, b) {
                        return a == null && (a = b > 2 ? 1 : 0), b && b < 3 && (a = Math.round(a * 100) + "%"), a
                    });
                return c[3] === 1 && (c.pop(), b = "hsl("), b + c.join(",") + ")"
            },
            toHexString: function (b) {
                var c = this._rgba.slice(),
                    d = c.pop();
                return b && c.push(~~ (d * 255)), "#" + a.map(c, function (a, b) {
                    return a = (a || 0).toString(16), a.length === 1 ? "0" + a : a
                }).join("")
            },
            toString: function () {
                return this._rgba[3] === 0 ? "transparent" : this.toRgbaString()
            }
        }), f.fn.parse.prototype = f.fn, g.hsla.to = function (a) {
            if (a[0] == null || a[1] == null || a[2] == null) return [null, null, null, a[3]];
            var b = a[0] / 255,
                c = a[1] / 255,
                d = a[2] / 255,
                e = a[3],
                f = Math.max(b, c, d),
                g = Math.min(b, c, d),
                h = f - g,
                i = f + g,
                j = i * .5,
                k, l;
            return g === f ? k = 0 : b === f ? k = 60 * (c - d) / h + 360 : c === f ? k = 60 * (d - b) / h + 120 : k = 60 * (b - c) / h + 240, j === 0 || j === 1 ? l = j : j <= .5 ? l = h / i : l = h / (2 - i), [Math.round(k) % 360, l, j, e == null ? 1 : e]
        }, g.hsla.from = function (a) {
            if (a[0] == null || a[1] == null || a[2] == null) return [null, null, null, a[3]];
            var b = a[0] / 360,
                c = a[1],
                d = a[2],
                e = a[3],
                f = d <= .5 ? d * (1 + c) : d + c - d * c,
                g = 2 * d - f,
                h, i, j;
            return [Math.round(n(g, f, b + 1 / 3) * 255), Math.round(n(g, f, b) * 255), Math.round(n(g, f, b - 1 / 3) * 255), e]
        }, k(g, function (c, e) {
            var g = e.props,
                h = e.cache,
                i = e.to,
                j = e.from;
            f.fn[c] = function (c) {
                i && !this[h] && (this[h] = i(this._rgba));
                if (c === b) return this[h].slice();
                var d = a.type(c),
                    e = d === "array" || d === "object" ? c : arguments,
                    m = this[h].slice(),
                    n;
                return k(g, function (a, b) {
                    var c = e[d === "object" ? a : b.idx];
                    c == null && (c = m[b.idx]), m[b.idx] = l(c, b)
                }), j ? (n = f(j(m)), n[h] = m, n) : f(m)
            }, k(g, function (b, e) {
                if (f.fn[b]) return;
                f.fn[b] = function (f) {
                    var g = a.type(f),
                        h = b === "alpha" ? this._hsla ? "hsla" : "rgba" : c,
                        i = this[h](),
                        j = i[e.idx],
                        k;
                    return g === "undefined" ? j : (g === "function" && (f = f.call(this, j), g = a.type(f)), f == null && e.empty ? this : (g === "string" && (k = d.exec(f), k && (f = j + parseFloat(k[2]) * (k[1] === "+" ? 1 : -1))), i[e.idx] = f, this[h](i)))
                }
            })
        }), k(c, function (b, c) {
            a.cssHooks[c] = {
                set: function (b, d) {
                    var e, g, h;
                    if (a.type(d) !== "string" || (e = m(d))) {
                        d = f(e || d);
                        if (!i.rgba && d._rgba[3] !== 1) {
                            h = c === "backgroundColor" ? b.parentNode : b;
                            do g = a.curCSS(h, "backgroundColor");
                            while ((g === "" || g === "transparent") && (h = h.parentNode) && h.style);
                            d = d.blend(g && g !== "transparent" ? g : "_default")
                        }
                        d = d.toRgbaString()
                    }
                    try {
                        b.style[c] = d
                    } catch (d) {}
                }
            }, a.fx.step[c] = function (b) {
                b.colorInit || (b.start = f(b.elem, c), b.end = f(b.end), b.colorInit = !0), a.cssHooks[c].set(b.elem, b.start.transition(b.end, b.pos))
            }
        }), a(function () {
            var a = document.createElement("div"),
                b = a.style;
            b.cssText = "background-color:rgba(1,1,1,.5)", i.rgba = b.backgroundColor.indexOf("rgba") > -1
        }), j = a.Color.names = {
            aqua: "#00ffff",
            azure: "#f0ffff",
            beige: "#f5f5dc",
            black: "#000000",
            blue: "#0000ff",
            brown: "#a52a2a",
            cyan: "#00ffff",
            darkblue: "#00008b",
            darkcyan: "#008b8b",
            darkgrey: "#a9a9a9",
            darkgreen: "#006400",
            darkkhaki: "#bdb76b",
            darkmagenta: "#8b008b",
            darkolivegreen: "#556b2f",
            darkorange: "#ff8c00",
            darkorchid: "#9932cc",
            darkred: "#8b0000",
            darksalmon: "#e9967a",
            darkviolet: "#9400d3",
            fuchsia: "#ff00ff",
            gold: "#ffd700",
            green: "#008000",
            indigo: "#4b0082",
            khaki: "#f0e68c",
            lightblue: "#add8e6",
            lightcyan: "#e0ffff",
            lightgreen: "#90ee90",
            lightgrey: "#d3d3d3",
            lightpink: "#ffb6c1",
            lightyellow: "#ffffe0",
            lime: "#00ff00",
            magenta: "#ff00ff",
            maroon: "#800000",
            navy: "#000080",
            olive: "#808000",
            orange: "#ffa500",
            pink: "#ffc0cb",
            purple: "#800080",
            violet: "#800080",
            red: "#ff0000",
            silver: "#c0c0c0",
            white: "#ffffff",
            yellow: "#ffff00",
            transparent: [null, null, null, 0],
            _default: "#ffffff"
        }
    }(a), function () {
        function d() {
            var b = this.ownerDocument.defaultView ? this.ownerDocument.defaultView.getComputedStyle(this, null) : this.currentStyle,
                c = {},
                d, e, f;
            if (b && b.length && b[0] && b[b[0]]) {
                f = b.length;
                while (f--) d = b[f], typeof b[d] == "string" && (c[a.camelCase(d)] = b[d])
            } else for (d in b) typeof b[d] == "string" && (c[d] = b[d]);
            return c
        }
        function e(b, d) {
            var e = {},
                f, g;
            for (f in d) g = d[f], b[f] !== g && !c[f] && (a.fx.step[f] || !isNaN(parseFloat(g))) && (e[f] = g);
            return e
        }
        var b = ["add", "remove", "toggle"],
            c = {
                border: 1,
                borderBottom: 1,
                borderColor: 1,
                borderLeft: 1,
                borderRight: 1,
                borderTop: 1,
                borderWidth: 1,
                margin: 1,
                padding: 1
            };
        a.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function (b, c) {
            a.fx.step[c] = function (a) {
                if (a.end !== "none" && !a.setAttr || a.pos === 1 && !a.setAttr) jQuery.style(a.elem, c, a.end), a.setAttr = !0
            }
        }), a.effects.animateClass = function (c, f, g, h) {
            var i = a.speed(f, g, h);
            return this.queue(function () {
                var f = a(this),
                    g = f.attr("class") || "",
                    h, j = i.children ? f.find("*").andSelf() : f;
                j = j.map(function () {
                    var b = a(this);
                    return {
                        el: b,
                        start: d.call(this)
                    }
                }), h = function () {
                    a.each(b, function (a, b) {
                        c[b] && f[b + "Class"](c[b])
                    })
                }, h(), j = j.map(function () {
                    return this.end = d.call(this.el[0]), this.diff = e(this.start, this.end), this
                }), f.attr("class", g), j = j.map(function () {
                    var b = this,
                        c = a.Deferred(),
                        d = jQuery.extend({}, i, {
                            queue: !1,
                            complete: function () {
                                c.resolve(b)
                            }
                        });
                    return this.el.animate(this.diff, d), c.promise()
                }), a.when.apply(a, j.get()).done(function () {
                    h(), a.each(arguments, function () {
                        var b = this.el;
                        a.each(this.diff, function (a) {
                            b.css(a, "")
                        })
                    }), i.complete.call(f[0])
                })
            })
        }, a.fn.extend({
            _addClass: a.fn.addClass,
            addClass: function (b, c, d, e) {
                return c ? a.effects.animateClass.apply(this, [{
                    add: b
                },
                c, d, e]) : this._addClass(b)
            },
            _removeClass: a.fn.removeClass,
            removeClass: function (b, c, d, e) {
                return c ? a.effects.animateClass.apply(this, [{
                    remove: b
                },
                c, d, e]) : this._removeClass(b)
            },
            _toggleClass: a.fn.toggleClass,
            toggleClass: function (b, c, d, e, f) {
                return typeof c == "boolean" || c === undefined ? d ? a.effects.animateClass.apply(this, [c ? {
                    add: b
                } : {
                    remove: b
                },
                d, e, f]) : this._toggleClass(b, c) : a.effects.animateClass.apply(this, [{
                    toggle: b
                },
                c, d, e])
            },
            switchClass: function (b, c, d, e, f) {
                return a.effects.animateClass.apply(this, [{
                    add: c,
                    remove: b
                },
                d, e, f])
            }
        })
    }(), function () {
        function d(b, c, d, e) {
            a.isPlainObject(b) && (c = b, b = b.effect), b = {
                effect: b
            }, c === undefined && (c = {}), a.isFunction(c) && (e = c, d = null, c = {});
            if (typeof c == "number" || a.fx.speeds[c]) e = d, d = c, c = {};
            return a.isFunction(d) && (e = d, d = null), c && a.extend(b, c), d = d || c.duration, b.duration = a.fx.off ? 0 : typeof d == "number" ? d : d in a.fx.speeds ? a.fx.speeds[d] : a.fx.speeds._default, b.complete = e || c.complete, b
        }
        function e(c) {
            return !c || typeof c == "number" || a.fx.speeds[c] ? !0 : typeof c == "string" && !a.effects.effect[c] ? b && a.effects[c] ? !1 : !0 : !1
        }
        a.extend(a.effects, {
            version: "@VERSION",
            save: function (a, b) {
                for (var d = 0; d < b.length; d++) b[d] !== null && a.data(c + b[d], a[0].style[b[d]])
            },
            restore: function (a, b) {
                for (var d = 0; d < b.length; d++) b[d] !== null && a.css(b[d], a.data(c + b[d]))
            },
            setMode: function (a, b) {
                return b === "toggle" && (b = a.is(":hidden") ? "show" : "hide"), b
            },
            getBaseline: function (a, b) {
                var c, d;
                switch (a[0]) {
                case "top":
                    c = 0;
                    break;
                case "middle":
                    c = .5;
                    break;
                case "bottom":
                    c = 1;
                    break;
                default:
                    c = a[0] / b.height
                }
                switch (a[1]) {
                case "left":
                    d = 0;
                    break;
                case "center":
                    d = .5;
                    break;
                case "right":
                    d = 1;
                    break;
                default:
                    d = a[1] / b.width
                }
                return {
                    x: d,
                    y: c
                }
            },
            createWrapper: function (b) {
                if (b.parent().is(".ui-effects-wrapper")) return b.parent();
                var c = {
                    width: b.outerWidth(!0),
                    height: b.outerHeight(!0),
                    "float": b.css("float")
                },
                    d = a("<div></div>").addClass("ui-effects-wrapper").css({
                        fontSize: "100%",
                        background: "transparent",
                        border: "none",
                        margin: 0,
                        padding: 0
                    }),
                    e = {
                        width: b.width(),
                        height: b.height()
                    },
                    f = document.activeElement;
                try {
                    f.id
                } catch (g) {
                    f = document.body
                }
                return b.wrap(d), (b[0] === f || a.contains(b[0], f)) && a(f).focus(), d = b.parent(), b.css("position") === "static" ? (d.css({
                    position: "relative"
                }), b.css({
                    position: "relative"
                })) : (a.extend(c, {
                    position: b.css("position"),
                    zIndex: b.css("z-index")
                }), a.each(["top", "left", "bottom", "right"], function (a, d) {
                    c[d] = b.css(d), isNaN(parseInt(c[d], 10)) && (c[d] = "auto")
                }), b.css({
                    position: "relative",
                    top: 0,
                    left: 0,
                    right: "auto",
                    bottom: "auto"
                })), b.css(e), d.css(c).show()
            },
            removeWrapper: function (b) {
                var c = document.activeElement;
                return b.parent().is(".ui-effects-wrapper") && (b.parent().replaceWith(b), (b[0] === c || a.contains(b[0], c)) && a(c).focus()), b
            },
            setTransition: function (b, c, d, e) {
                return e = e || {}, a.each(c, function (a, c) {
                    var f = b.cssUnit(c);
                    f[0] > 0 && (e[c] = f[0] * d + f[1])
                }), e
            }
        }), a.fn.extend({
            effect: function (c, e, f, g) {
                function m(b) {
                    function f() {
                        a.isFunction(d) && d.call(c[0]), a.isFunction(b) && b()
                    }
                    var c = a(this),
                        d = h.complete,
                        e = h.mode;
                    (c.is(":hidden") ? e === "hide" : e === "show") ? f() : k.call(c[0], h, f)
                }
                var h = d.apply(this, arguments),
                    i = h.mode,
                    j = h.queue,
                    k = a.effects.effect[h.effect],
                    l = !k && b && a.effects[h.effect];
                return a.fx.off || !k && !l ? i ? this[i](h.duration, h.complete) : this.each(function () {
                    h.complete && h.complete.call(this)
                }) : k ? j === !1 ? this.each(m) : this.queue(j || "fx", m) : l.call(this, {
                    options: h,
                    duration: h.duration,
                    callback: h.complete,
                    mode: h.mode
                })
            },
            _show: a.fn.show,
            show: function (a) {
                if (e(a)) return this._show.apply(this, arguments);
                var b = d.apply(this, arguments);
                return b.mode = "show", this.effect.call(this, b)
            },
            _hide: a.fn.hide,
            hide: function (a) {
                if (e(a)) return this._hide.apply(this, arguments);
                var b = d.apply(this, arguments);
                return b.mode = "hide", this.effect.call(this, b)
            },
            __toggle: a.fn.toggle,
            toggle: function (b) {
                if (e(b) || typeof b == "boolean" || a.isFunction(b)) return this.__toggle.apply(this, arguments);
                var c = d.apply(this, arguments);
                return c.mode = "toggle", this.effect.call(this, c)
            },
            cssUnit: function (b) {
                var c = this.css(b),
                    d = [];
                return a.each(["em", "px", "%", "pt"], function (a, b) {
                    c.indexOf(b) > 0 && (d = [parseFloat(c), b])
                }), d
            }
        })
    }(), function () {
        var b = {};
        a.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function (a, c) {
            b[c] = function (b) {
                return Math.pow(b, a + 2)
            }
        }), a.extend(b, {
            Sine: function (a) {
                return 1 - Math.cos(a * Math.PI / 2)
            },
            Circ: function (a) {
                return 1 - Math.sqrt(1 - a * a)
            },
            Elastic: function (a) {
                return a === 0 || a === 1 ? a : -Math.pow(2, 8 * (a - 1)) * Math.sin(((a - 1) * 80 - 7.5) * Math.PI / 15)
            },
            Back: function (a) {
                return a * a * (3 * a - 2)
            },
            Bounce: function (a) {
                var b, c = 4;
                while (a < ((b = Math.pow(2, --c)) - 1) / 11);
                return 1 / Math.pow(4, 3 - c) - 7.5625 * Math.pow((b * 3 - 2) / 22 - a, 2)
            }
        }), a.each(b, function (b, c) {
            a.easing["easeIn" + b] = c, a.easing["easeOut" + b] = function (a) {
                return 1 - c(1 - a)
            }, a.easing["easeInOut" + b] = function (a) {
                return a < .5 ? c(a * 2) / 2 : 1 - c(a * -2 + 2) / 2
            }
        })
    }()
}), define("jqueryui/effects/drop", ["jquery", "jqueryui/effect"], function (a) {
    a.effects.effect.drop = function (b, c) {
        var d = a(this),
            e = ["position", "top", "bottom", "left", "right", "opacity", "height", "width"],
            f = a.effects.setMode(d, b.mode || "hide"),
            g = f === "show",
            h = b.direction || "left",
            i = h === "up" || h === "down" ? "top" : "left",
            j = h === "up" || h === "left" ? "pos" : "neg",
            k = {
                opacity: g ? 1 : 0
            },
            l;
        a.effects.save(d, e), d.show(), a.effects.createWrapper(d), l = b.distance || d[i === "top" ? "outerHeight" : "outerWidth"]({
            margin: !0
        }) / 2, g && d.css("opacity", 0).css(i, j === "pos" ? -l : l), k[i] = (g ? j === "pos" ? "+=" : "-=" : j === "pos" ? "-=" : "+=") + l, d.animate(k, {
            queue: !1,
            duration: b.duration,
            easing: b.easing,
            complete: function () {
                f === "hide" && d.hide(), a.effects.restore(d, e), a.effects.removeWrapper(d), c()
            }
        })
    }
}), function () {
    define("compiled/jquery.rails_flash_notifications", ["i18n!shared.flash_notices", "underscore", "compiled/fn/preventDefault", "jqueryui/effects/drop", "vendor/jquery.cookie"], function (a, b, c) {
        var d, e, f, g, h;
        return d = $("#flash_message_buffer"), e = $("#flash_message_holder"), f = $("#flash_screenreader_holder"), e.on("click", ".close_link", c), e.on("click", "li", function () {
            var a, b;
            a = $(this);
            if (a.hasClass("no_close")) return;
            a.hasClass("unsupported_browser") && $.cookie("unsupported_browser_dismissed", "1"), a.stop(!0, !0).remove();
            if ((b = a.data("buffer-index")) != null) return d.find("[data-buffer-index=" + b + "]").remove()
        }), h = function (a, b) {
            var c;
            return c = $('<span role="alert">' + b + "</span>"), c.appendTo(f), window.setTimeout(function () {
                return c.remove()
            }, 2e4)
        }, g = function (c, d, f, g) {
            var i;
            return g == null && (g = {}), i = $('<li class="ic-flash-' + c + '">\n  <i></i>\n  ' + d + '\n  <a href="#" class="close_link icon-end">' + a.t("close", "Close") + "</a>\n</li>"), i.appendTo(e).css(b.extend({
                zIndex: 1
            }, g)).show("drop", {
                direction: "up"
            }, "fast", function () {
                return $(this).css("z-index", 2)
            }).delay(f || 7e3).animate({
                "z-index": 1
            }, 0).fadeOut("slow", function () {
                return $(this).slideUp("fast", function () {
                    return $(this).remove()
                })
            }), h(c, d)
        }, $.flashMessage = function (a, b) {
            return b == null && (b = 3e3), g("success", a, b)
        }, $.flashError = function (a, b) {
            return g("error", a, b)
        }, $.screenReaderFlashMessage = function (a) {
            return h("success", a)
        }, $.screenReaderFlashError = function (a) {
            return h("error", a)
        }
    })
}.call(this), define("ajax_errors", ["INST", "i18n!ajax_errors", "jquery", "str/htmlEscape", "jquery.ajaxJSON", "compiled/jquery.rails_flash_notifications", "jqueryui/effects/drop"], function (a, b, c, d) {
    var e = window.iTest;
    a.errorURL = "/record_js_error", a.errorCount = 0, a.errorLastHandledTimes = {}, a.log_error = function (b) {
        b = b || {};
        var d = +(new Date);
        if (a.errorLastHandledTimes[b.message] > d - 5e3) return;
        a.errorLastHandledTimes[b.message] = d;
        var e = "";
        try {
            e = c && c.fn && c.fn.text && c("#identity .user_name").text()
        } catch (f) {}
        var g = "?";
        b.url = b.url || location.href, b.backtrace = b.backtrace || b.url, b.platform = b.platform || navigator.platform, b.action = b.action || location.href, b.user_name = e, b.user_agent = navigator.userAgent, b.parentPage = window.location;
        for (var h in b) g = g + "error[" + h + "]=" + encodeURIComponent(b[h]) + "&";
        a.errorCount += 1;
        var i = document.createElement("img");
        i.src = a.errorURL + g.substring(0, 2e3), i.style.position = "absolute", i.style.left = "-10000px", i.style.top = 0, document.body.appendChild(i)
    }, window.onerror = function (b, c, d, f, g) {
        var h = ["webkitSafeEl", "NPMethod called on non-NPObject wrapped JSObject!"];
        for (var i in h) if (h[i] && b && b.match && b.match(h[i])) return !0;
        if (c && c.match && !c.match(window.location.hostname)) return !0;
        var j = g && g.stack;
        a.log_error({
            message: b,
            url: c,
            line: d,
            column: f,
            backtrace: j
        });
        if (a.environment == "production") return !0;
        e && e.ok(!1, "unexpected error: " + b)
    }, c(document).ready(function () {
        c("#instructure_ajax_error_result").defaultAjaxError(function (e, f, g, h, i) {
            if (h === "abort") return;
            var j = "0",
                k = b.t("no_text", "No text"),
                l = {};
            try {
                j = f.status, k = f.responseText, l = c.parseJSON(k)
            } catch (m) {}
            c.ajaxJSON(location.protocol + "//" + location.host + "/simple_response.json?rnd=" + Math.round(Math.random() * 9999999), "GET", {}, function () {
                l && l.status == "AUT" ? o(b.t("errors.timeout", "There was a problem with your request, possibly due to a long period of inactivity.  Please reload the page and try again."), f) : o(b.t("errors.unhandled", "Oops! The last request didn't work out."), f)
            }, function () {
                o(b.t("errors.connection_lost", "Connection to %{host} was lost.  Please make sure you're connected to the Internet and try again.", {
                    host: location.host
                }), f)
            }, {
                skipDefaultError: !0
            });
            var n = c(this),
                o = function (e, f) {
                    var g = n[0];
                    if (!g) return;
                    var h = g.contentDocument || g.contentWindow && g.contentWindow.document || window.frames[n.attr("id")].document,
                        l = c(h).find("body");
                    l.html(c("<h1 />").text(b.t("error_heading", "Ajax Error: %{status_code}", {
                        status_code: j
                    }))), l.append(k), c("#instructure_ajax_error_box").hide();
                    var m = "";
                    i && (e += "<br/><span style='font-size: 0.7em;'>(Development Only)</span>");
                    if (i || a.environment != "production") e += "<br/><a href='#' class='last_error_details_link'>" + d(b.t("links.details", "details...")) + "</a>";
                    c.flashError(e)
                };
            window.ajaxErrorFlash = o;
            var p = c.ajaxJSON.findRequest(f);
            p = p || {};
            if (p.data) {
                p.params = "";
                for (var q in p.data) p.params += "&" + q + "=" + p.data[q]
            }
            var r = "";
            try {
                r = c("#identity .user_name").text()
            } catch (m) {}
            if (a.ajaxErrorURL) {
                var s = "&Msg=" + escape(k) + "&StatusCode=" + escape(j) + "&URL=" + escape(p.url || "unknown") + "&Page=" + escape(location.href) + "&Method=" + escape(p.submit_type || "unknown") + "&UserName=" + escape(r) + "&Platform=" + escape(navigator.platform) + "&UserAgent=" + escape(navigator.userAgent) + "&Params=" + escape(p.params || "unknown");
                c("body").append("<img style='position: absolute; left: -1000px; top: 0;' src='" + a.ajaxErrorURL + s.substring(0, 2e3) + "' />")
            }
        }), c(".last_error_details_link").live("click", function (a) {
            a.preventDefault(), a.stopPropagation(), c("#instructure_ajax_error_box").show()
        }), c(".close_instructure_ajax_error_box_link").click(function (a) {
            a.preventDefault(), c("#instructure_ajax_error_box").hide()
        })
    })
}), define("jqueryui/progressbar", ["jquery", "jqueryui/core", "jqueryui/widget"], function (a) {
    a.widget("ui.progressbar", {
        version: "@VERSION",
        options: {
            value: 0,
            max: 100
        },
        min: 0,
        _create: function () {
            this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({
                role: "progressbar",
                "aria-valuemin": this.min,
                "aria-valuemax": this.options.max,
                "aria-valuenow": this._value()
            }), this.valueDiv = a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element), this.oldValue = this._value(), this._refreshValue()
        },
        _destroy: function () {
            this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"), this.valueDiv.remove()
        },
        value: function (a) {
            return a === undefined ? this._value() : (this._setOption("value", a), this)
        },
        _setOption: function (a, b) {
            a === "value" && (this.options.value = b, this._refreshValue(), this._value() === this.options.max && this._trigger("complete")), this._super(a, b)
        },
        _value: function () {
            var a = this.options.value;
            return typeof a != "number" && (a = 0), Math.min(this.options.max, Math.max(this.min, a))
        },
        _percentage: function () {
            return 100 * this._value() / this.options.max
        },
        _refreshValue: function () {
            var a = this.value(),
                b = this._percentage();
            this.oldValue !== a && (this.oldValue = a, this._trigger("change")), this.valueDiv.toggle(a > this.min).toggleClass("ui-corner-right", a === this.options.max).width(b.toFixed(0) + "%"), this.element.attr("aria-valuenow", a)
        }
    })
}), define("jqueryui/tabs", ["jquery", "jqueryui/core", "jqueryui/widget"], function (a) {
    function d() {
        return ++b
    }
    function e(a) {
        return a = a.cloneNode(!1), a.hash.length > 1 && a.href.replace(c, "") === location.href.replace(c, "")
    }
    var b = 0,
        c = /#.*$/;
    a.widget("ui.tabs", {
        version: "@VERSION",
        delay: 300,
        options: {
            active: null,
            collapsible: !1,
            event: "click",
            heightStyle: "content",
            hide: null,
            show: null,
            activate: null,
            beforeActivate: null,
            beforeLoad: null,
            load: null
        },
        _create: function () {
            var b, c = this,
                d = this.options,
                e = d.active;
            this.running = !1, this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible", d.collapsible).delegate(".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function (b) {
                a(this).is(".ui-state-disabled") && b.preventDefault()
            }).delegate(".ui-tabs-anchor", "focus" + this.eventNamespace, function () {
                a(this).closest("li").is(".ui-state-disabled") && this.blur()
            }), this._processTabs();
            if (e === null) {
                location.hash && this.anchors.each(function (a, b) {
                    if (b.hash === location.hash) return e = a, !1
                }), e === null && (e = this.tabs.filter(".ui-tabs-active").index());
                if (e === null || e === -1) e = this.tabs.length ? 0 : !1
            }
            e !== !1 && (e = this.tabs.eq(e).index(), e === -1 && (e = d.collapsible ? !1 : 0)), d.active = e, !d.collapsible && d.active === !1 && this.anchors.length && (d.active = 0), a.isArray(d.disabled) && (d.disabled = a.unique(d.disabled.concat(a.map(this.tabs.filter(".ui-state-disabled"), function (a) {
                return c.tabs.index(a)
            }))).sort()), this.options.active !== !1 && this.anchors.length ? this.active = this._findActive(this.options.active) : this.active = a(), this._refresh(), this.active.length && this.load(d.active)
        },
        _getCreateEventData: function () {
            return {
                tab: this.active,
                panel: this.active.length ? this._getPanelForTab(this.active) : a()
            }
        },
        _tabKeydown: function (b) {
            var c = a(this.document[0].activeElement).closest("li"),
                d = this.tabs.index(c),
                e = !0;
            if (this._handlePageNav(b)) return;
            switch (b.keyCode) {
            case a.ui.keyCode.RIGHT:
            case a.ui.keyCode.DOWN:
                d++;
                break;
            case a.ui.keyCode.UP:
            case a.ui.keyCode.LEFT:
                e = !1, d--;
                break;
            case a.ui.keyCode.END:
                d = this.anchors.length - 1;
                break;
            case a.ui.keyCode.HOME:
                d = 0;
                break;
            case a.ui.keyCode.SPACE:
                b.preventDefault(), clearTimeout(this.activating), this._activate(d);
                return;
            case a.ui.keyCode.ENTER:
                b.preventDefault(), clearTimeout(this.activating), this._activate(d === this.options.active ? !1 : d);
                return;
            default:
                return
            }
            b.preventDefault(), clearTimeout(this.activating), d = this._focusNextTab(d, e), b.ctrlKey || (c.attr("aria-selected", "false"), this.tabs.eq(d).attr("aria-selected", "true"), this.activating = this._delay(function () {
                this.option("active", d)
            }, this.delay))
        },
        _panelKeydown: function (b) {
            if (this._handlePageNav(b)) return;
            b.ctrlKey && b.keyCode === a.ui.keyCode.UP && (b.preventDefault(), this.active.focus())
        },
        _handlePageNav: function (b) {
            if (b.altKey && b.keyCode === a.ui.keyCode.PAGE_UP) return this._activate(this._focusNextTab(this.options.active - 1, !1)), !0;
            if (b.altKey && b.keyCode === a.ui.keyCode.PAGE_DOWN) return this._activate(this._focusNextTab(this.options.active + 1, !0)), !0
        },
        _findNextTab: function (b, c) {
            function e() {
                return b > d && (b = 0), b < 0 && (b = d), b
            }
            var d = this.tabs.length - 1;
            while (a.inArray(e(), this.options.disabled) !== -1) b = c ? b + 1 : b - 1;
            return b
        },
        _focusNextTab: function (a, b) {
            return a = this._findNextTab(a, b), this.tabs.eq(a).focus(), a
        },
        _setOption: function (a, b) {
            if (a === "active") {
                this._activate(b);
                return
            }
            if (a === "disabled") {
                this._setupDisabled(b);
                return
            }
            this._super(a, b), a === "collapsible" && (this.element.toggleClass("ui-tabs-collapsible", b), !b && this.options.active === !1 && this._activate(0)), a === "event" && this._setupEvents(b), a === "heightStyle" && this._setupHeightStyle(b)
        },
        _tabId: function (a) {
            return a.attr("aria-controls") || "ui-tabs-" + d()
        },
        _sanitizeSelector: function (a) {
            return a ? a.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : ""
        },
        refresh: function () {
            var b, c = this.options,
                d = this.tablist.children(":has(a[href])");
            c.disabled = a.map(d.filter(".ui-state-disabled"), function (a) {
                return d.index(a)
            }), this._processTabs(), c.active === !1 || !this.anchors.length ? (c.active = !1, this.active = a()) : this.active.length && !a.contains(this.tablist[0], this.active[0]) ? this.tabs.length === c.disabled.length ? (c.active = !1, this.active = a()) : this._activate(this._findNextTab(Math.max(0, c.active - 1), !1)) : c.active = this.tabs.index(this.active), this._refresh()
        },
        _refresh: function () {
            this._setupDisabled(this.options.disabled), this._setupEvents(this.options.event), this._setupHeightStyle(this.options.heightStyle), this.tabs.not(this.active).attr({
                "aria-selected": "false",
                tabIndex: -1
            }), this.panels.not(this._getPanelForTab(this.active)).hide().attr({
                "aria-expanded": "false",
                "aria-hidden": "true"
            }), this.active.length ? (this.active.addClass("ui-tabs-active ui-state-active").attr({
                "aria-selected": "true",
                tabIndex: 0
            }), this._getPanelForTab(this.active).show().attr({
                "aria-expanded": "true",
                "aria-hidden": "false"
            })) : this.tabs.eq(0).attr("tabIndex", 0)
        },
        _processTabs: function () {
            var b = this;
            this.tablist = this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role", "tablist"), this.tabs = this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({
                role: "tab",
                tabIndex: -1
            }), this.anchors = this.tabs.map(function () {
                return a("a", this)[0]
            }).addClass("ui-tabs-anchor").attr({
                role: "presentation",
                tabIndex: -1
            }), this.panels = a(), this.anchors.each(function (c, d) {
                var f, g, h, i = a(d).uniqueId().attr("id"),
                    j = a(d).closest("li"),
                    k = j.attr("aria-controls");
                e(d) ? (f = d.hash, g = b.element.find(b._sanitizeSelector(f))) : (h = b._tabId(j), f = "#" + h, g = b.element.find(f), g.length || (g = b._createPanel(h), g.insertAfter(b.panels[c - 1] || b.tablist)), g.attr("aria-live", "polite")), g.length && (b.panels = b.panels.add(g)), k && j.data("ui-tabs-aria-controls", k), j.attr({
                    "aria-controls": f.substring(1),
                    "aria-labelledby": i
                }), g.attr("aria-labelledby", i)
            }), this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role", "tabpanel")
        },
        _getList: function () {
            return this.element.find("ol,ul").eq(0)
        },
        _createPanel: function (b) {
            return a("<div>").attr("id", b).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy", !0)
        },
        _setupDisabled: function (b) {
            a.isArray(b) && (b.length ? b.length === this.anchors.length && (b = !0) : b = !1);
            for (var c = 0, d; d = this.tabs[c]; c++) b === !0 || a.inArray(c, b) !== -1 ? a(d).addClass("ui-state-disabled").attr("aria-disabled", "true") : a(d).removeClass("ui-state-disabled").removeAttr("aria-disabled");
            this.options.disabled = b
        },
        _setupEvents: function (b) {
            var c = {
                click: function (a) {
                    a.preventDefault()
                }
            };
            b && a.each(b.split(" "), function (a, b) {
                c[b] = "_eventHandler"
            }), this._off(this.anchors.add(this.tabs).add(this.panels)), this._on(this.anchors, c), this._on(this.tabs, {
                keydown: "_tabKeydown"
            }), this._on(this.panels, {
                keydown: "_panelKeydown"
            }), this._focusable(this.tabs), this._hoverable(this.tabs)
        },
        _setupHeightStyle: function (b) {
            var c, d, e = this.element.parent();
            b === "fill" ? (a.support.minHeight || (d = e.css("overflow"), e.css("overflow", "hidden")), c = e.height(), this.element.siblings(":visible").each(function () {
                var b = a(this),
                    d = b.css("position");
                if (d === "absolute" || d === "fixed") return;
                c -= b.outerHeight(!0)
            }), d && e.css("overflow", d), this.element.children().not(this.panels).each(function () {
                c -= a(this).outerHeight(!0)
            }), this.panels.each(function () {
                a(this).height(Math.max(0, c - a(this).innerHeight() + a(this).height()))
            }).css("overflow", "auto")) : b === "auto" && (c = 0, this.panels.each(function () {
                c = Math.max(c, a(this).height("").height())
            }).height(c))
        },
        _eventHandler: function (b) {
            var c = this.options,
                d = this.active,
                e = a(b.currentTarget),
                f = e.closest("li"),
                g = f[0] === d[0],
                h = g && c.collapsible,
                i = h ? a() : this._getPanelForTab(f),
                j = d.length ? this._getPanelForTab(d) : a(),
                k = {
                    oldTab: d,
                    oldPanel: j,
                    newTab: h ? a() : f,
                    newPanel: i
                };
            b.preventDefault();
            if (f.hasClass("ui-state-disabled") || f.hasClass("ui-tabs-loading") || this.running || g && !c.collapsible || this._trigger("beforeActivate", b, k) === !1) return;
            c.active = h ? !1 : this.tabs.index(f), this.active = g ? a() : f, this.xhr && this.xhr.abort(), !j.length && !i.length && a.error("jQuery UI Tabs: Mismatching fragment identifier."), i.length && this.load(this.tabs.index(f), b), this._toggle(b, k)
        },
        _toggle: function (b, c) {
            function g() {
                d.running = !1, d._trigger("activate", b, c)
            }
            function h() {
                c.newTab.closest("li").addClass("ui-tabs-active ui-state-active"), e.length && d.options.show ? d._show(e, d.options.show, g) : (e.show(), g())
            }
            var d = this,
                e = c.newPanel,
                f = c.oldPanel;
            this.running = !0, f.length && this.options.hide ? this._hide(f, this.options.hide, function () {
                c.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"), h()
            }) : (c.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"), f.hide(), h()), f.attr({
                "aria-expanded": "false",
                "aria-hidden": "true"
            }), c.oldTab.attr("aria-selected", "false"), e.length && f.length ? c.oldTab.attr("tabIndex", -1) : e.length && this.tabs.filter(function () {
                return a(this).attr("tabIndex") === 0
            }).attr("tabIndex", -1), e.attr({
                "aria-expanded": "true",
                "aria-hidden": "false"
            }), c.newTab.attr({
                "aria-selected": "true",
                tabIndex: 0
            })
        },
        _activate: function (b) {
            var c, d = this._findActive(b);
            if (d[0] === this.active[0]) return;
            d.length || (d = this.active), c = d.find(".ui-tabs-anchor")[0], this._eventHandler({
                target: c,
                currentTarget: c,
                preventDefault: a.noop
            })
        },
        _findActive: function (b) {
            return b === !1 ? a() : this.tabs.eq(b)
        },
        _getIndex: function (a) {
            return typeof a == "string" && (a = this.anchors.index(this.anchors.filter("[href$='" + a + "']"))), a
        },
        _destroy: function () {
            this.xhr && this.xhr.abort(), this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"), this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"), this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeData("href.tabs").removeData("load.tabs").removeUniqueId(), this.tabs.add(this.panels).each(function () {
                a.data(this, "ui-tabs-destroy") ? a(this).remove() : a(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")
            }), this.tabs.each(function () {
                var b = a(this),
                    c = b.data("ui-tabs-aria-controls");
                c ? b.attr("aria-controls", c) : b.removeAttr("aria-controls")
            }), this.options.heightStyle !== "content" && this.panels.css("height", "")
        },
        enable: function (b) {
            var c = this.options.disabled;
            if (c === !1) return;
            b === undefined ? c = !1 : (b = this._getIndex(b), a.isArray(c) ? c = a.map(c, function (a) {
                return a !== b ? a : null
            }) : c = a.map(this.tabs, function (a, c) {
                return c !== b ? c : null
            })), this._setupDisabled(c)
        },
        disable: function (b) {
            var c = this.options.disabled;
            if (c === !0) return;
            if (b === undefined) c = !0;
            else {
                b = this._getIndex(b);
                if (a.inArray(b, c) !== -1) return;
                a.isArray(c) ? c = a.merge([b], c).sort() : c = [b]
            }
            this._setupDisabled(c)
        },
        load: function (b, c) {
            b = this._getIndex(b);
            var d = this,
                f = this.tabs.eq(b),
                g = f.find(".ui-tabs-anchor"),
                h = this._getPanelForTab(f),
                i = {
                    tab: f,
                    panel: h
                };
            if (e(g[0])) return;
            this.xhr = a.ajax({
                url: g.attr("href"),
                beforeSend: function (b, e) {
                    return d._trigger("beforeLoad", c, a.extend({
                        jqXHR: b,
                        ajaxSettings: e
                    }, i))
                }
            }), this.xhr && this.xhr.statusText !== "canceled" && (f.addClass("ui-tabs-loading"), h.attr("aria-busy", "true"), this.xhr.success(function (a) {
                setTimeout(function () {
                    h.html(a), d._trigger("load", c, i)
                }, 1)
            }).complete(function (a, b) {
                setTimeout(function () {
                    b === "abort" && d.panels.stop(!1, !0), f.removeClass("ui-tabs-loading"), h.removeAttr("aria-busy"), a === d.xhr && delete d.xhr
                }, 1)
            }))
        },
        _getPanelForTab: function (b) {
            var c = a(b).attr("aria-controls");
            return this.element.find(this._sanitizeSelector("#" + c))
        }
    }), a.uiBackCompat !== !1 && (a.ui.tabs.prototype._ui = function (a, b) {
        return {
            tab: a,
            panel: b,
            index: this.anchors.index(a)
        }
    }, a.widget("ui.tabs", a.ui.tabs, {
        url: function (a, b) {
            this.anchors.eq(a).attr("href", b)
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        options: {
            ajaxOptions: null,
            cache: !1
        },
        _create: function () {
            this._super();
            var b = this;
            this._on({
                tabsbeforeload: function (c, d) {
                    if (a.data(d.tab[0], "cache.tabs")) {
                        c.preventDefault();
                        return
                    }
                    a.extend(d.ajaxSettings, b.options.ajaxOptions, {
                        error: function (a, c, e) {
                            try {
                                b.options.ajaxOptions.error(a, c, d.tab.closest("li").index(), d.tab[0])
                            } catch (e) {}
                        }
                    }), d.jqXHR.success(function () {
                        b.options.cache && a.data(d.tab[0], "cache.tabs", !0)
                    })
                }
            })
        },
        _setOption: function (a, b) {
            a === "cache" && b === !1 && this.anchors.removeData("cache.tabs"), this._super(a, b)
        },
        _destroy: function () {
            this.anchors.removeData("cache.tabs"), this._super()
        },
        url: function (a, b) {
            this.anchors.eq(a).removeData("cache.tabs"), this._superApply(arguments)
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        abort: function () {
            this.xhr && this.xhr.abort()
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        options: {
            spinner: "<em>Loading&#8230;</em>"
        },
        _create: function () {
            this._super(), this._on({
                tabsbeforeload: function (a, b) {
                    if (!this.options.spinner) return;
                    var c = b.tab.find("span"),
                        d = c.html();
                    c.html(this.options.spinner), b.jqXHR.complete(function () {
                        c.html(d)
                    })
                }
            })
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        options: {
            enable: null,
            disable: null
        },
        enable: function (b) {
            var c = this.options,
                d;
            if (b && c.disabled === !0 || a.isArray(c.disabled) && a.inArray(b, c.disabled) !== -1) d = !0;
            this._superApply(arguments), d && this._trigger("enable", null, this._ui(this.anchors[b], this.panels[b]))
        },
        disable: function (b) {
            var c = this.options,
                d;
            if (b && c.disabled === !1 || a.isArray(c.disabled) && a.inArray(b, c.disabled) === -1) d = !0;
            this._superApply(arguments), d && this._trigger("disable", null, this._ui(this.anchors[b], this.panels[b]))
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        options: {
            add: null,
            remove: null,
            tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
        },
        add: function (b, c, d) {
            d === undefined && (d = this.anchors.length);
            var e, f, g = this.options,
                h = a(g.tabTemplate.replace(/#\{href\}/g, b).replace(/#\{label\}/g, c)),
                i = b.indexOf("#") ? this._tabId(h) : b.replace("#", "");
            return h.addClass("ui-state-default ui-corner-top").data("ui-tabs-destroy", !0), h.attr("aria-controls", i), e = d >= this.tabs.length, f = this.element.find("#" + i), f.length || (f = this._createPanel(i), e ? d > 0 ? f.insertAfter(this.panels.eq(-1)) : f.appendTo(this.element) : f.insertBefore(this.panels[d])), f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").hide(), e ? h.appendTo(this.tablist) : h.insertBefore(this.tabs[d]), g.disabled = a.map(g.disabled, function (a) {
                return a >= d ? ++a : a
            }), this.refresh(), this.tabs.length === 1 && g.active === !1 && this.option("active", 0), this._trigger("add", null, this._ui(this.anchors[d], this.panels[d])), this
        },
        remove: function (b) {
            b = this._getIndex(b);
            var c = this.options,
                d = this.tabs.eq(b).remove(),
                e = this._getPanelForTab(d).remove();
            return d.hasClass("ui-tabs-active") && this.anchors.length > 2 && this._activate(b + (b + 1 < this.anchors.length ? 1 : -1)), c.disabled = a.map(a.grep(c.disabled, function (a) {
                return a !== b
            }), function (a) {
                return a >= b ? --a : a
            }), this.refresh(), this._trigger("remove", null, this._ui(d.find("a")[0], e[0])), this
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        length: function () {
            return this.anchors.length
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        options: {
            idPrefix: "ui-tabs-"
        },
        _tabId: function (b) {
            var c = b.is("li") ? b.find("a[href]") : b;
            return c = c[0], a(c).closest("li").attr("aria-controls") || c.title && c.title.replace(/\s/g, "_").replace(/[^\w\u00c0-\uFFFF\-]/g, "") || this.options.idPrefix + d()
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        options: {
            panelTemplate: "<div></div>"
        },
        _createPanel: function (b) {
            return a(this.options.panelTemplate).attr("id", b).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy", !0)
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        _create: function () {
            var a = this.options;
            a.active === null && a.selected !== undefined && (a.active = a.selected === -1 ? !1 : a.selected), this._super(), a.selected = a.active, a.selected === !1 && (a.selected = -1)
        },
        _setOption: function (a, b) {
            if (a !== "selected") return this._super(a, b);
            var c = this.options;
            this._super("active", b === -1 ? !1 : b), c.selected = c.active, c.selected === !1 && (c.selected = -1)
        },
        _eventHandler: function (a) {
            this._superApply(arguments), this.options.selected = this.options.active, this.options.selected === !1 && (this.options.selected = -1)
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        options: {
            show: null,
            select: null
        },
        _create: function () {
            this._super(), this.options.active !== !1 && this._trigger("show", null, this._ui(this.active.find(".ui-tabs-anchor")[0], this._getPanelForTab(this.active)[0]))
        },
        _trigger: function (a, b, c) {
            var d = this._superApply(arguments);
            return d ? (a === "beforeActivate" && c.newTab.length ? d = this._super("select", b, {
                tab: c.newTab.find(".ui-tabs-anchor")[0],
                panel: c.newPanel[0],
                index: c.newTab.closest("li").index()
            }) : a === "activate" && c.newTab.length && (d = this._super("show", b, {
                tab: c.newTab.find(".ui-tabs-anchor")[0],
                panel: c.newPanel[0],
                index: c.newTab.closest("li").index()
            })), d) : !1
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        select: function (a) {
            a = this._getIndex(a);
            if (a === -1) {
                if (!this.options.collapsible || this.options.selected === -1) return;
                a = this.options.selected
            }
            this.anchors.eq(a).trigger(this.options.event + this.eventNamespace)
        }
    }), function () {
        var b = 0;
        a.widget("ui.tabs", a.ui.tabs, {
            options: {
                cookie: null
            },
            _create: function () {
                var a = this.options,
                    b;
                a.active == null && a.cookie && (b = parseInt(this._cookie(), 10), b === -1 && (b = !1), a.active = b), this._super()
            },
            _cookie: function (c) {
                var d = [this.cookie || (this.cookie = this.options.cookie.name || "ui-tabs-" + ++b)];
                return arguments.length && (d.push(c === !1 ? -1 : c), d.push(this.options.cookie)), a.cookie.apply(null, d)
            },
            _refresh: function () {
                this._super(), this.options.cookie && this._cookie(this.options.active, this.options.cookie)
            },
            _eventHandler: function (a) {
                this._superApply(arguments), this.options.cookie && this._cookie(this.options.active, this.options.cookie)
            },
            _destroy: function () {
                this._super(), this.options.cookie && this._cookie(null, this.options.cookie)
            }
        })
    }(), a.widget("ui.tabs", a.ui.tabs, {
        _trigger: function (b, c, d) {
            var e = a.extend({}, d);
            return b === "load" && (e.panel = e.panel[0], e.tab = e.tab.find(".ui-tabs-anchor")[0]), this._super(b, c, e)
        }
    }), a.widget("ui.tabs", a.ui.tabs, {
        options: {
            fx: null
        },
        _getFx: function () {
            var b, c, d = this.options.fx;
            return d && (a.isArray(d) ? (b = d[0], c = d[1]) : b = c = d), d ? {
                show: c,
                hide: b
            } : null
        },
        _toggle: function (a, b) {
            function g() {
                c.running = !1, c._trigger("activate", a, b)
            }
            function h() {
                b.newTab.closest("li").addClass("ui-tabs-active ui-state-active"), d.length && f.show ? d.animate(f.show, f.show.duration, function () {
                    g()
                }) : (d.show(), g())
            }
            var c = this,
                d = b.newPanel,
                e = b.oldPanel,
                f = this._getFx();
            if (!f) return this._super(a, b);
            c.running = !0, e.length && f.hide ? e.animate(f.hide, f.hide.duration, function () {
                b.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"), h()
            }) : (b.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"), e.hide(), h())
        }
    }))
}), define("translations/registration", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                registration: {
                    get_started: "بدء العمل",
                    welcome_to_canvas: "مرحبًا بك في Canvas!"
                }
            },
            de: {
                registration: {
                    get_started: "Jetzt beginnen",
                    welcome_to_canvas: "Willkommen bei Canvas!"
                }
            },
            "el-gr": {},
            "en-AU": {
                registration: {
                    get_started: "Get Started",
                    welcome_to_canvas: "Welcome to Canvas!"
                }
            },
            "en-GB": {
                registration: {
                    get_started: "Get started",
                    welcome_to_canvas: "Welcome to Canvas!"
                }
            },
            es: {
                registration: {
                    get_started: "Comenzar",
                    welcome_to_canvas: "¡Bienvenido a Canvas!"
                }
            },
            fr: {
                registration: {
                    get_started: "Premiers pas",
                    welcome_to_canvas: "Bienvenue dans Canvas !"
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                registration: {
                    get_started: "作業の開始",
                    welcome_to_canvas: "Canvas へようこそ!"
                }
            },
            ko: {
                registration: {
                    get_started: "시작하기",
                    welcome_to_canvas: "Canvas에 오신 것을 환영합니다!"
                }
            },
            "ko-kr": {},
            nl: {
                registration: {
                    get_started: "Aan de slag",
                    welcome_to_canvas: "Welkom op Canvas!"
                }
            },
            pl: {
                registration: {
                    get_started: "Rozpocznij",
                    welcome_to_canvas: "Witamy w systemie Canvas!"
                }
            },
            pt: {
                registration: {
                    get_started: "Começar",
                    welcome_to_canvas: "Bem-vindo ao Canvas!"
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                registration: {
                    get_started: "Давайте начнем!",
                    welcome_to_canvas: "Вас приветствует Canvas!"
                }
            },
            "tr-tr": {},
            zh: {
                registration: {
                    get_started: "开始",
                    welcome_to_canvas: "欢迎使用 Canvas！"
                }
            },
            "zh-hans": {}
        }
    })
}), define("translations/registration.incomplete_registration_warning", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "إعداد حسابك على وشك الإتمام. للإنهاء، الرجاء مراجعة بريدك الإلكتروني على *%{email}* لتعيين كلمة مرورك.",
                        start_participating: "يمكنك المشاركة الآن، لكن يجب أن تقوم بتعيين كلمة مرور قبل أن تتمكن من معاودة تسجيل الدخول."
                    }
                }
            },
            de: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "Die Erstellung Ihres Kontos ist fast abgeschlossen. Überprüfen Sie Ihre E-mails unter *%{email}*, um ein Kennwort festzulegen.",
                        start_participating: "Sie können bereits teilnehmen, doch Sie müssen zur erneuten Anmeldung ein Kennwort festlegen."
                    }
                }
            },
            "el-gr": {},
            "en-AU": {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "Your account is almost set up. To finish, please check your email at *%{email}* to set your password.",
                        start_participating: "You can start participating now, but you must set a password before you can log back in."
                    }
                }
            },
            "en-GB": {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "Your account is almost set up. To finish, please check your email at *%{email}* to set your password.",
                        start_participating: "You can start participating now, but you must set a password before you can log back in."
                    }
                }
            },
            es: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "Su cuenta está casi lista. Para terminar, revise su correo electrónico en *%{email}* para establecer su contraseña.",
                        start_participating: "Puede comenzar a participar ahora, pero debe establecer una contraseña antes de poder ingresar otra vez."
                    }
                }
            },
            fr: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "Votre compte est presque configuré. Pour terminer, vérifiez votre e-mail à l’adresse *%{email}* pour définir votre mot de passe.",
                        start_participating: "Vous pouvez commencer à participer dès maintenant, mais vous devez définir un mot de passe pour pouvoir vous reconnecter."
                    }
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "アカウントの設定完了まであと少しです。設定を完了するには、*%{email}* 宛に送信された電子メールを確認し、パスワードを設定してください。",
                        start_participating: "今すぐ参加できますが、再度ログインするには、先にパスワードを設定する必要があります。"
                    }
                }
            },
            ko: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "계정을 거의 다 설정했습니다. 마치려면 암호를 설정하기 위해 *%{email}*에서 이메일을 확인하시기 바랍니다.",
                        start_participating: "이제 참여할 수 있지만 다시 로그인하기 전에 암호를 설정해야 합니다."
                    }
                }
            },
            "ko-kr": {},
            nl: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "Uw account is bijna klaar. Controleer uw e-mail (%{email}) om uw wachtwoord in te stellen en dit proces af te ronden.",
                        start_participating: "U kunt nu deelnemen, maar u moet een wachtwoord instellen voordat u zich opnieuw aan kunt melden."
                    }
                }
            },
            pl: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "Ustawienia konta prawie ukończono. Aby zakończyć, sprawdź swój e-mail  *%{email}* w celu ustawienia hasła.",
                        start_participating: "Możesz rozpocząć uczestnictwo teraz, ale musisz najpierw ustalić hasło, aby móc się zalogowac ponownie."
                    }
                }
            },
            pt: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "A sua conta está quase configurada. Para terminar, verifique o seu e-mail *%{email}* para definir a sua palavra-passe.",
                        start_participating: "Pode começar a participar agora, mas tem de definir uma palavra-passe antes de poder iniciar sessão novamente."
                    }
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "Ваша учетная запись практически создана. Чтобы закончить, пожалуйста, проверьте свою электронную почту в *%{email}* для настройки пароля.",
                        start_participating: "Вы можете начать участвовать сейчас, но вы должны настроить пароль, прежде чем вы сможете войти."
                    }
                }
            },
            "tr-tr": {},
            zh: {
                registration: {
                    incomplete_registration_warning: {
                        set_up_account: "您的帐户差不多已设立。要完成，请在 *%{email}* 中检查电子邮件，以设置密码。",
                        start_participating: "您现在就可开始参与，但您必须先设置密码，然后才能重新登录。"
                    }
                }
            },
            "zh-hans": {}
        }
    })
}), define("jquery.fancyplaceholder", ["jquery"], function (a) {
    a.fn.fancyPlaceholder = function () {
        function d() {
            a.each(c, function (a, b) {
                b[1][b[0].val() ? "hide" : "show"]()
            })
        }
        var b, c = [];
        return this.each(function () {
            var e = a(this),
                f = a("label[for=" + e.attr("id") + "]");
            f.addClass("placeholder").wrapInner("<span/>").css({
                "font-family": e.css("font-family"),
                "font-size": e.css("font-size")
            }), e.focus(function () {
                f.addClass("focus", 300)
            }).blur(function () {
                f.removeClass("focus", 300)
            }).bind("keyup", d);
            try {
                a("input:focus").get(0) == this && e.triggerHandler("focus")
            } catch (g) {}
            c.push([e, f]), b || window.setInterval(d, 100)
        })
    }
}), define("jqueryui/autocomplete", ["jquery", "jqueryui/core", "jqueryui/widget", "jqueryui/position", "jqueryui/menu"], function (a) {
    var b = 0;
    a.widget("ui.autocomplete", {
        version: "@VERSION",
        defaultElement: "<input>",
        options: {
            appendTo: "body",
            autoFocus: !1,
            delay: 300,
            minLength: 1,
            position: {
                my: "left top",
                at: "left bottom",
                collision: "none"
            },
            source: null,
            change: null,
            close: null,
            focus: null,
            open: null,
            response: null,
            search: null,
            select: null
        },
        pending: 0,
        _create: function () {
            var b, c, d;
            this.isMultiLine = this._isMultiLine(), this.valueMethod = this.element[this.element.is("input,textarea") ? "val" : "text"], this.isNewMenu = !0, this.element.addClass("ui-autocomplete-input").attr("autocomplete", "off"), this._on({
                keydown: function (e) {
                    if (this.element.prop("readOnly")) {
                        b = !0, d = !0, c = !0;
                        return
                    }
                    b = !1, d = !1, c = !1;
                    var f = a.ui.keyCode;
                    switch (e.keyCode) {
                    case f.PAGE_UP:
                        b = !0, this._move("previousPage", e);
                        break;
                    case f.PAGE_DOWN:
                        b = !0, this._move("nextPage", e);
                        break;
                    case f.UP:
                        b = !0, this._keyEvent("previous", e);
                        break;
                    case f.DOWN:
                        b = !0, this._keyEvent("next", e);
                        break;
                    case f.ENTER:
                    case f.NUMPAD_ENTER:
                        this.menu.active && (b = !0, e.preventDefault(), this.menu.select(e));
                        break;
                    case f.TAB:
                        this.menu.active && this.menu.select(e);
                        break;
                    case f.ESCAPE:
                        this.menu.element.is(":visible") && (this._value(this.term), this.close(e), e.preventDefault());
                        break;
                    default:
                        c = !0, this._searchTimeout(e)
                    }
                },
                keypress: function (d) {
                    if (b) {
                        b = !1, d.preventDefault();
                        return
                    }
                    if (c) return;
                    var e = a.ui.keyCode;
                    switch (d.keyCode) {
                    case e.PAGE_UP:
                        this._move("previousPage", d);
                        break;
                    case e.PAGE_DOWN:
                        this._move("nextPage", d);
                        break;
                    case e.UP:
                        this._keyEvent("previous", d);
                        break;
                    case e.DOWN:
                        this._keyEvent("next", d)
                    }
                },
                input: function (a) {
                    if (d) {
                        d = !1, a.preventDefault();
                        return
                    }
                    this._searchTimeout(a)
                },
                focus: function () {
                    this.selectedItem = null, this.previous = this._value()
                },
                blur: function (a) {
                    if (this.cancelBlur) {
                        delete this.cancelBlur;
                        return
                    }
                    clearTimeout(this.searching), this.close(a), this._change(a)
                }
            }), this._initSource(), this.menu = a("<ul>").addClass("ui-autocomplete").appendTo(this.document.find(this.options.appendTo || "body")[0]).menu({
                input: a(),
                role: null
            }).zIndex(this.element.zIndex() + 1).hide().data("menu"), this._on(this.menu.element, {
                mousedown: function (b) {
                    b.preventDefault(), this.cancelBlur = !0, this._delay(function () {
                        delete this.cancelBlur
                    });
                    var c = this.menu.element[0];
                    a(b.target).closest(".ui-menu-item").length || this._delay(function () {
                        var b = this;
                        this.document.one("mousedown", function (d) {
                            d.target !== b.element[0] && d.target !== c && !a.contains(c, d.target) && b.close()
                        })
                    })
                },
                menufocus: function (b, c) {
                    if (this.isNewMenu) {
                        this.isNewMenu = !1;
                        if (b.originalEvent && /^mouse/.test(b.originalEvent.type)) {
                            this.menu.blur(), this.document.one("mousemove", function () {
                                a(b.target).trigger(b.originalEvent)
                            });
                            return
                        }
                    }
                    var d = c.item.data("ui-autocomplete-item") || c.item.data("item.autocomplete");
                    !1 !== this._trigger("focus", b, {
                        item: d
                    }) ? b.originalEvent && /^key/.test(b.originalEvent.type) && this._value(d.value) : this.liveRegion.text(d.value)
                },
                menuselect: function (a, b) {
                    var c = b.item.data("ui-autocomplete-item") || b.item.data("item.autocomplete"),
                        d = this.previous;
                    this.element[0] !== this.document[0].activeElement && (this.element.focus(), this.previous = d, this._delay(function () {
                        this.previous = d, this.selectedItem = c
                    })), !1 !== this._trigger("select", a, {
                        item: c
                    }) && this._value(c.value), this.term = this._value(), this.close(a), this.selectedItem = c
                }
            }), this.liveRegion = a("<span>", {
                role: "status",
                "aria-live": "polite"
            }).addClass("ui-helper-hidden-accessible").insertAfter(this.element), a.fn.bgiframe && this.menu.element.bgiframe(), this._on(this.window, {
                beforeunload: function () {
                    this.element.removeAttr("autocomplete")
                }
            })
        },
        _destroy: function () {
            clearTimeout(this.searching), this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"), this.menu.element.remove(), this.liveRegion.remove()
        },
        _setOption: function (a, b) {
            this._super(a, b), a === "source" && this._initSource(), a === "appendTo" && this.menu.element.appendTo(this.document.find(b || "body")[0]), a === "disabled" && b && this.xhr && this.xhr.abort()
        },
        _isMultiLine: function () {
            return this.element.is("textarea") ? !0 : this.element.is("input") ? !1 : this.element.prop("isContentEditable")
        },
        _initSource: function () {
            var b, c, d = this;
            a.isArray(this.options.source) ? (b = this.options.source, this.source = function (c, d) {
                d(a.ui.autocomplete.filter(b, c.term))
            }) : typeof this.options.source == "string" ? (c = this.options.source, this.source = function (b, e) {
                d.xhr && d.xhr.abort(), d.xhr = a.ajax({
                    url: c,
                    data: b,
                    dataType: "json",
                    success: function (a, b) {
                        e(a)
                    },
                    error: function () {
                        e([])
                    }
                })
            }) : this.source = this.options.source
        },
        _searchTimeout: function (a) {
            clearTimeout(this.searching), this.searching = this._delay(function () {
                this.term !== this._value() && (this.selectedItem = null, this.search(null, a))
            }, this.options.delay)
        },
        search: function (a, b) {
            a = a != null ? a : this._value(), this.term = this._value();
            if (a.length < this.options.minLength) return this.close(b);
            if (this._trigger("search", b) === !1) return;
            return this._search(a)
        },
        _search: function (a) {
            this.pending++, this.element.addClass("ui-autocomplete-loading"), this.cancelSearch = !1, this.source({
                term: a
            }, this._response())
        },
        _response: function () {
            var a = this,
                c = ++b;
            return function (d) {
                c === b && a.__response(d), a.pending--, a.pending || a.element.removeClass("ui-autocomplete-loading")
            }
        },
        __response: function (a) {
            a && (a = this._normalize(a)), this._trigger("response", null, {
                content: a
            }), !this.options.disabled && a && a.length && !this.cancelSearch ? (this._suggest(a), this._trigger("open")) : this._close()
        },
        close: function (a) {
            this.cancelSearch = !0, this._close(a)
        },
        _close: function (a) {
            this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger("close", a))
        },
        _change: function (a) {
            this.previous !== this._value() && this._trigger("change", a, {
                item: this.selectedItem
            })
        },
        _normalize: function (b) {
            return b.length && b[0].label && b[0].value ? b : a.map(b, function (b) {
                return typeof b == "string" ? {
                    label: b,
                    value: b
                } : a.extend({
                    label: b.label || b.value,
                    value: b.value || b.label
                }, b)
            })
        },
        _suggest: function (b) {
            var c = this.menu.element.empty().zIndex(this.element.zIndex() + 1);
            this._renderMenu(c, b), this.menu.blur(), this.menu.refresh(), c.show(), this._resizeMenu(), c.position(a.extend({
                of: this.element
            }, this.options.position)), this.options.autoFocus && this.menu.next()
        },
        _resizeMenu: function () {
            var a = this.menu.element;
            a.outerWidth(Math.max(a.width("").outerWidth() + 1, this.element.outerWidth()))
        },
        _renderMenu: function (b, c) {
            var d = this;
            a.each(c, function (a, c) {
                d._renderItemData(b, c)
            })
        },
        _renderItemData: function (a, b) {
            return this._renderItem(a, b).data("ui-autocomplete-item", b)
        },
        _renderItem: function (b, c) {
            return a("<li>").append(a("<a>").text(c.label)).appendTo(b)
        },
        _move: function (a, b) {
            if (!this.menu.element.is(":visible")) {
                this.search(null, b);
                return
            }
            if (this.menu.isFirstItem() && /^previous/.test(a) || this.menu.isLastItem() && /^next/.test(a)) {
                this._value(this.term), this.menu.blur();
                return
            }
            this.menu[a](b)
        },
        widget: function () {
            return this.menu.element
        },
        _value: function (a) {
            return this.valueMethod.apply(this.element, arguments)
        },
        _keyEvent: function (a, b) {
            if (!this.isMultiLine || this.menu.element.is(":visible")) this._move(a, b), b.preventDefault()
        }
    }), a.extend(a.ui.autocomplete, {
        escapeRegex: function (a) {
            return a.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
        },
        filter: function (b, c) {
            var d = new RegExp(a.ui.autocomplete.escapeRegex(c), "i");
            return a.grep(b, function (a) {
                return d.test(a.label || a.value || a)
            })
        }
    }), a.widget("ui.autocomplete", a.ui.autocomplete, {
        options: {
            messages: {
                noResults: "No search results.",
                results: function (a) {
                    return a + (a > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."
                }
            }
        },
        __response: function (a) {
            var b;
            this._superApply(arguments);
            if (this.options.disabled || this.cancelSearch) return;
            a && a.length ? b = this.options.messages.results(a.length) : b = this.options.messages.noResults, this.liveRegion.text(b)
        }
    })
}), define("translations/link_enrollment", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                link_enrollment: {
                    buttons: {
                        link: "الارتباط بالطالب"
                    },
                    errors: {
                        link_failed: "فشل الارتباط، الرجاء المحاولة مرة أخرى",
                        load_failed: "فشل تحميل الطلاب، الرجاء المحاولة مرة أخرى"
                    },
                    messages: {
                        linking_to_student: "جارٍ الارتباط بالطالب...",
                        loading_students: "جارٍ تحميل الطلاب..."
                    },
                    options: {
                        no_link: "[ بلا ارتباط ]"
                    },
                    titles: {
                        link_to_student: "الارتباط بالطالب"
                    }
                }
            },
            de: {
                link_enrollment: {
                    buttons: {
                        link: "Link zum Studenten"
                    },
                    errors: {
                        link_failed: "Zuordnung fehlgeschlagen, bitte erneut versuchen",
                        load_failed: "Laden von Studenten fehlgeschlagen, bitte erneut versuchen"
                    },
                    messages: {
                        linking_to_student: "Zuordnung zum Studenten wird eingerichtet...",
                        loading_students: "Studenten werden geladen..."
                    },
                    options: {
                        no_link: "[ Keine Zuordnung ]"
                    },
                    titles: {
                        link_to_student: "Link zum Studenten"
                    }
                }
            },
            "el-gr": {},
            "en-AU": {
                link_enrollment: {
                    buttons: {
                        link: "Link to Student"
                    },
                    errors: {
                        link_failed: "Linking Failed, please try again",
                        load_failed: "Loading Students Failed, please try again"
                    },
                    messages: {
                        linking_to_student: "Linking to Student...",
                        loading_students: "Loading Students..."
                    },
                    options: {
                        no_link: "[ No Link ]"
                    },
                    titles: {
                        link_to_student: "Link to Student"
                    }
                }
            },
            "en-GB": {
                link_enrollment: {
                    buttons: {
                        link: "Link to student"
                    },
                    errors: {
                        link_failed: "Linking failed. Please try again",
                        load_failed: "Loading students failed. Please try again"
                    },
                    messages: {
                        linking_to_student: "Linking to student...",
                        loading_students: "Loading students..."
                    },
                    options: {
                        no_link: "[ No link ]"
                    },
                    titles: {
                        link_to_student: "Link to student"
                    }
                }
            },
            es: {
                link_enrollment: {
                    buttons: {
                        link: "Enlazar a Estudiante"
                    },
                    errors: {
                        link_failed: "No se pudieron hacer los enlaces, intente de nuevo",
                        load_failed: "No se pudieron cargar los Estudiantes, intente de nuevo"
                    },
                    messages: {
                        linking_to_student: "Enlazando a Estudiante...",
                        loading_students: "Cargando Estudiantes..."
                    },
                    options: {
                        no_link: "[ Sin Enlace ]"
                    },
                    titles: {
                        link_to_student: "Enlazar a Estudiante"
                    }
                }
            },
            fr: {
                link_enrollment: {
                    buttons: {
                        link: "Lier à l’étudiant"
                    },
                    errors: {
                        link_failed: "Échec de liaison, veuillez réessayer",
                        load_failed: "Échec du chargement des étudiants, veuillez réessayer"
                    },
                    messages: {
                        linking_to_student: "Liaison à l’étudiant...",
                        loading_students: "Chargement des étudiants..."
                    },
                    options: {
                        no_link: "[ Aucun lien ]"
                    },
                    titles: {
                        link_to_student: "Lier à l’étudiant"
                    }
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                link_enrollment: {
                    buttons: {
                        link: "受講生へのリンク"
                    },
                    errors: {
                        link_failed: "リンクに失敗しました。もう一度やり直してください",
                        load_failed: "受講生の読み込みに失敗しました。もう一度やり直してください。"
                    },
                    messages: {
                        linking_to_student: "受講生にリンクしています...",
                        loading_students: "受講生を読み込んでいます。"
                    },
                    options: {
                        no_link: "[ リンクなし ]"
                    },
                    titles: {
                        link_to_student: "受講生へのリンク"
                    }
                }
            },
            ko: {
                link_enrollment: {
                    buttons: {
                        link: "학생에게 연결"
                    },
                    errors: {
                        link_failed: "연결 실패. 다시 시도하시기 바랍니다.",
                        load_failed: "학생 로드하기 실패"
                    },
                    messages: {
                        linking_to_student: "학생에게 연결 중...",
                        loading_students: "학생 로드 중..."
                    },
                    options: {
                        no_link: "[ 연결 없음 ]"
                    },
                    titles: {
                        link_to_student: "학생에게 연결"
                    }
                }
            },
            "ko-kr": {},
            nl: {
                link_enrollment: {
                    buttons: {
                        link: "Link naar cursist"
                    },
                    errors: {
                        link_failed: "Koppelen mislukt, probeer het opnieuw",
                        load_failed: "Het laden van cursisten is mislukt, probeer het opnieuw"
                    },
                    messages: {
                        linking_to_student: "Wordt gekoppeld aan cursist...",
                        loading_students: "Bezig met het laden van cursisten..."
                    },
                    options: {
                        no_link: "[ Geen koppeling ]"
                    },
                    titles: {
                        link_to_student: "Link naar cursist"
                    }
                }
            },
            pl: {
                link_enrollment: {
                    buttons: {
                        link: "Połącz z uczestnikiem"
                    },
                    errors: {
                        link_failed: "Łączenie nie powiodło się, spróbuj ponownie",
                        load_failed: "Ładowanie uczestników nie powiodło się, spróbuj ponownie"
                    },
                    messages: {
                        linking_to_student: "Trwa łączenie z uczestnikiem...",
                        loading_students: "Trwa ładowanie listy uczestników..."
                    },
                    options: {
                        no_link: "[ Brak łącza ]"
                    },
                    titles: {
                        link_to_student: "Połącz z uczestnikiem"
                    }
                }
            },
            pt: {
                link_enrollment: {
                    buttons: {
                        link: "Vincular ao aluno"
                    },
                    errors: {
                        link_failed: "Falha na vinculação, tente novamente",
                        load_failed: "Falha ao carregar alunos, tente novamente"
                    },
                    messages: {
                        linking_to_student: "Vinculando ao aluno...",
                        loading_students: "Carregando alunos..."
                    },
                    options: {
                        no_link: "[ Nenhum link ]"
                    },
                    titles: {
                        link_to_student: "Vincular ao aluno"
                    }
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                link_enrollment: {
                    buttons: {
                        link: "Связать со студентом"
                    },
                    errors: {
                        link_failed: "Ошибка связи, повторите попытку",
                        load_failed: "Сбой загрузки студентов, повторите попытку"
                    },
                    messages: {
                        linking_to_student: "Связать со студентом...",
                        loading_students: "Загрузка студентов..."
                    },
                    options: {
                        no_link: "[ Нет ссылки ]"
                    },
                    titles: {
                        link_to_student: "Связать со студентом"
                    }
                }
            },
            "tr-tr": {},
            zh: {
                link_enrollment: {
                    buttons: {
                        link: "链接至学生"
                    },
                    errors: {
                        link_failed: "链接失败，请重试",
                        load_failed: "加载学生失败，请重试"
                    },
                    messages: {
                        linking_to_student: "正在链接至学生...",
                        loading_students: "正在加载学生..."
                    },
                    options: {
                        no_link: "[无链接]"
                    },
                    titles: {
                        link_to_student: "链接至学生"
                    }
                }
            },
            "zh-hans": {}
        }
    })
}), define("vendor/jquery.pageless", ["jquery"], function (a) {
    var b = !1,
        c = !b,
        d = ".pageless",
        e = "scroll" + d,
        f = "resize" + d,
        g = null,
        h = function (g) {
            var h, i = b,
                j, k = {
                    container: window,
                    currentPage: 1,
                    distance: 100,
                    pagination: ".pagination",
                    params: {},
                    url: location.href,
                    loaderImage: "/images/load.gif",
                    animate: !0
                },
                l, m, n = function (b) {
                    a.isFunction(b) ? b.call() : p(b)
                },
                o = function () {
                    return k.loaderHtml || '<div id="pageless-loader" style="display:none;text-align:center;width:100%;">  <div class="msg" style="color:#e9e9e9;font-size:2em"></div>  <img src="' + k.loaderImage + '" alt="loading more results" style="margin:10px auto" /></div>'
                },
                p = function (b) {
                    b && a.extend(k, b), l = k.container, m = a(l), k.pagination && a(k.pagination).remove(), u()
                },
                q = function (b, c) {
                    var d = a(c.loader, b);
                    h = b, c.loader && d.length ? j = d : (j = a(o()), b.append(j), c.loaderHtml || a("#pageless-loader .msg").html(c.loaderMsg)), r(i)
                },
                r = function (a) {
                    i = a;
                    if (!j) return;
                    i ? j.parents().first().is(":visible") && k.animate ? j.fadeIn("normal") : j.show() : j.parents().first().is(":visible") && k.animate ? j.fadeOut("normal") : j.hide()
                },
                s = function () {
                    return l === window ? a(document).height() - m.scrollTop() - m.height() : m[0].scrollHeight - m.scrollTop() - m.height()
                },
                t = function () {
                    m.unbind(d)
                },
                u = function () {
                    m.bind(e + " " + f, v).trigger(e)
                },
                v = function () {
                    if (k.totalPages <= k.currentPage) {
                        t(), k.end && k.end.call();
                        return
                    }!i && s() < k.distance && (r(c), k.currentPage++, a.extend(k.params, {
                        page: k.currentPage
                    }), a.get(k.url, k.params, function (c, d, e) {
                        var c = a.isFunction(k.scrape) ? k.scrape(c, e) : c;
                        j ? j.before(c) : h.append(c), r(b), k.complete && k.complete.call()
                    }, "html"))
                };
            return {
                activate: n,
                applyContext: q
            }
        };
    a.pageless = function (a) {
        return g === null && (g = h(a), g.activate(a)), g
    }, a.fn.pageless = function (b) {
        return this.hasOwnProperty("pagelessInstance") || (this.pagelessInstance = h(b), this.pagelessInstance.activate(b)), this.pagelessInstance.applyContext(a(this), b), this
    }
}), define("vendor/jquery.scrollTo", ["jquery"], function (a) {
    function c(a) {
        return typeof a == "object" ? a : {
            top: a,
            left: a
        }
    }
    var b = a.scrollTo = function (b, c, d) {
            a(window).scrollTo(b, c, d)
        };
    b.defaults = {
        axis: "xy",
        duration: parseFloat(a.fn.jquery) >= 1.3 ? 0 : 1
    }, b.window = function (b) {
        return a(window)._scrollable()
    }, a.fn._scrollable = function () {
        return this.map(function () {
            var b = this,
                c = !b.nodeName || a.inArray(b.nodeName.toLowerCase(), ["iframe", "#document", "html", "body"]) != -1;
            if (!c) return b;
            var d = (b.contentWindow || b).document || b.ownerDocument || b;
            return a.browser.safari || d.compatMode == "BackCompat" ? d.body : d.documentElement
        })
    }, a.fn.scrollTo = function (d, e, f) {
        return typeof e == "object" && (f = e, e = 0), typeof f == "function" && (f = {
            onAfter: f
        }), d == "max" && (d = 9e9), f = a.extend({}, b.defaults, f), e = e || f.speed || f.duration, f.queue = f.queue && f.axis.length > 1, f.queue && (e /= 2), f.offset = c(f.offset), f.over = c(f.over), this._scrollable().each(function () {
            function m(a) {
                h.animate(k, e, f.easing, a &&
                function () {
                    a.call(this, d, f)
                })
            }
            var g = this,
                h = a(g),
                i = d,
                j, k = {},
                l = h.is("html,body");
            switch (typeof i) {
            case "number":
            case "string":
                if (/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(i)) {
                    i = c(i);
                    break
                }
                i = a(i, this);
            case "object":
                if (i.is || i.style) j = (i = a(i)).offset()
            }
            a.each(f.axis.split(""), function (a, c) {
                var d = c == "x" ? "Left" : "Top",
                    e = d.toLowerCase(),
                    n = "scroll" + d,
                    o = g[n],
                    p = b.max(g, c);
                if (j) k[n] = j[e] + (l ? 0 : o - h.offset()[e]), f.margin && (k[n] -= parseInt(i.css("margin" + d)) || 0, k[n] -= parseInt(i.css("border" + d + "Width")) || 0), k[n] += f.offset[e] || 0, f.over[e] && (k[n] += i[c == "x" ? "width" : "height"]() * f.over[e]);
                else {
                    var q = i[e];
                    k[n] = q && q.slice && q.slice(-1) == "%" ? parseFloat(q) / 100 * p : q
                }
                /^\d+$/.test(k[n]) && (k[n] = k[n] <= 0 ? 0 : Math.min(k[n], p)), !a && f.queue && (o != k[n] && m(f.onAfterFirst), delete k[n])
            }), m(f.onAfter)
        }).end()
    }, b.max = function (b, c) {
        var d = c == "x" ? "Width" : "Height",
            e = "scroll" + d;
        if (!a(b).is("html,body")) return b[e] - a(b)[d.toLowerCase()]();
        var f = "client" + d,
            g = b.ownerDocument.documentElement,
            h = b.ownerDocument.body;
        return Math.max(g[e], h[e]) - Math.min(g[f], h[f])
    }
}), define("jquery.scrollToVisible", ["jquery", "vendor/jquery.scrollTo"], function (a) {
    a.fn.scrollToVisible = function (b) {
        var c = {},
            d = a(b),
            e = a("body").offset();
        this.each(function () {
            try {
                return e = a(this).offset(), !1
            } catch (b) {}
        });
        if (d.length === 0) return;
        var f = d.offset(),
            g = d.outerWidth(),
            h = d.outerHeight(),
            i = f.top - e.top,
            j = i + h,
            k = f.left - e.left,
            l = k + g,
            m = this.selector == "html,body" ? a.windowScrollTop() : this.scrollTop(),
            n = this.scrollLeft(),
            o = this.outerHeight(),
            p = this.outerWidth();
        if (this[0].tagName == "HTML" || this[0].tagName == "BODY") o = a(window).height(), a("#wizard_box:visible").length > 0 && (o -= a("#wizard_box:visible").height()), p = a(window).width(), i -= m, k -= n, j -= m, l -= n;
        return i < 0 || o < h && j > o ? c.scrollTop = i + m : j > o && (c.scrollTop = j + m - o + 20), k < 0 ? c.scrollLeft = k + n : l > p && (c.scrollLeft = l + n - p + 20), c.scrollTop == 1 && (c.scrollTop = 0), c.scrollLeft == 1 && (c.scrollLeft = 0), this.scrollTop(c.scrollTop), this.scrollLeft(c.scrollLeft), this
    }
}), define("jquery.instructure_misc_plugins", ["i18n!instructure", "jquery", "jquery.ajaxJSON", "jqueryui/dialog", "jquery.scrollToVisible", "vendor/jquery.ba-hashchange", "vendor/jquery.scrollTo"], function (a, b) {
    return b.fn.ifExists = function (a) {
        return this.length && a.call(this, this), this
    }, b.fn.scrollbarWidth = function () {
        var a = b('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div>').appendTo(this),
            c = a.find("div"),
            d = c.innerWidth();
        a.css("overflow-y", "scroll");
        var e = c.innerWidth();
        return a.remove(), d - e
    }, b.fn.dim = function (a) {
        return this.animate({
            opacity: .4
        }, a)
    }, b.fn.undim = function (a) {
        return this.animate({
            opacity: 1
        }, a)
    }, b.fn.confirmDelete = function (c) {
        var c = b.extend({}, b.fn.confirmDelete.defaults, c),
            d = this,
            e = null,
            f = !0;
        c.noMessage = c.noMessage || c.no_message;
        var g = function () {
                if (!f) {
                    c.cancelled && b.isFunction(c.cancelled) && c.cancelled.call(d);
                    return
                }
                c.confirmed || (c.confirmed = function () {
                    d.dim()
                }), c.confirmed.call(d);
                if (c.url) {
                    c.success || (c.success = function (a) {
                        d.fadeOut("slow", function () {
                            d.remove()
                        })
                    });
                    var a = c.prepareData ? c.prepareData.call(d, e) : {};
                    c.token && (a.authenticity_token = c.token), a.authenticity_token || (a.authenticity_token = b("#ajax_authenticity_token").text()), b.ajaxJSON(c.url, "DELETE", a, function (a) {
                        c.success.call(d, a)
                    }, function (a, e, f, g) {
                        c.error && b.isFunction(c.error) ? c.error.call(d, a, e, f, g) : b.ajaxJSON.unhandledXHRs.push(e)
                    })
                } else c.success || (c.success = function () {
                    d.fadeOut("slow", function () {
                        d.remove()
                    })
                }), c.success.call(d)
            };
        if (c.message && !c.noMessage && !b.skipConfirmations) {
            if (c.dialog) {
                f = !1;
                var h = typeof c.dialog == "object" ? c.dialog : {};
                e = b(c.message).dialog(b.extend({}, {
                    modal: !0,
                    close: g,
                    buttons: [{
                        text: a.t("#buttons.cancel", "Cancel"),
                        click: function () {
                            b(this).dialog("close")
                        }
                    }, {
                        text: a.t("#buttons.delete", "Delete"),
                        "class": "btn-primary",
                        click: function () {
                            f = !0, b(this).dialog("close")
                        }
                    }]
                }, h));
                return
            }
            f = confirm(c.message)
        }
        g()
    }, b.fn.confirmDelete.defaults = {
        message: a.t("confirms.default_delete_thing", "Are you sure you want to delete this?")
    }, b.fn.fragmentChange = function (a) {
        if (a && a !== !0) {
            var c = (window.location.search || "").replace(/^\?/, "").split("&"),
                d, e = null;
            for (d in c) {
                var f = c[d];
                f && f.indexOf("hash=") === 0 && (e = "#" + f.substring(5))
            }
            this.bind("document_fragment_change", a);
            var g = this,
                h = !1;
            for (d in b._checkFragments.fragmentList) {
                var i = b._checkFragments.fragmentList[d];
                i.doc[0] == g[0] && (h = !0)
            }
            h || b._checkFragments.fragmentList.push({
                doc: g,
                fragment: ""
            }), b(window).bind("hashchange", b._checkFragments), setTimeout(function () {
                e && e.length > 0 ? g.triggerHandler("document_fragment_change", e) : g && g[0] && g[0].location && g[0].location.hash.length > 0 && g.triggerHandler("document_fragment_change", g[0].location.hash)
            }, 500)
        } else this.triggerHandler("document_fragment_change", this[0].location.hash);
        return this
    }, b._checkFragments = function () {
        var a = b._checkFragments.fragmentList;
        for (var c in a) {
            var d = a[c],
                e = d.doc;
            e[0].location.hash != d.fragment && (e.triggerHandler("document_fragment_change", e[0].location.hash), d.fragment = e[0].location.hash, b._checkFragments.fragmentList[c] = d)
        }
    }, b._checkFragments.fragmentList = [], b.fn.clickLink = function () {
        var a = this.eq(0);
        a.hasClass("disabled_link") || a.click()
    }, b.fn.showIf = function (a) {
        return b.isFunction(a) ? this.each(function (c) {
            b(this).showIf(a.call(this))
        }) : (a ? this.show() : this.hide(), this)
    }, b.fn.disableIf = function (a) {
        return b.isFunction(a) && (a = a.call(this)), this.prop("disabled", !! a), this
    }, b.fn.indicate = function (a) {
        a = a || {};
        var c;
        if (a == "remove") {
            c = this.data("indicator"), c && c.remove();
            return
        }
        b(".indicator_box").remove();
        var d = this.offset();
        a && a.offset && (d = a.offset);
        var e = this.width(),
            f = this.height(),
            g = (a.container || this).zIndex();
        c = b(document.createElement("div")), c.css({
            width: e + 6,
            height: f + 6,
            top: d.top - 3,
            left: d.left - 3,
            zIndex: g + 1,
            position: "absolute",
            display: "block",
            "-moz-border-radius": 5,
            opacity: .8,
            border: "2px solid #870",
            backgroundColor: "#fd0"
        }), c.addClass("indicator_box"), c.mouseover(function () {
            b(this).stop().fadeOut("fast", function () {
                b(this).remove()
            })
        }), this.data("indicator") && this.indicate("remove"), this.data("indicator", c), b("body").append(c), a && a.singleFlash ? c.hide().fadeIn().animate({
            opacity: .8
        }, 500).fadeOut("slow", function () {
            b(this).remove()
        }) : c.hide().fadeIn().animate({
            opacity: .8
        }, 500).fadeOut("slow").fadeIn("slow").animate({
            opacity: .8
        }, 2500).fadeOut("slow", function () {
            b(this).remove()
        }), a && a.scroll && b("html,body").scrollToVisible(c)
    }, b.fn.hasScrollbar = function () {
        return this.length && this[0].clientHeight < this[0].scrollHeight
    }, b.fn.log = function (a) {
        return console.log("%s: %o", a, this), this
    }, b.fn.chevronCrumbs = function (a) {
        return this.each(function () {
            b(this).show().addClass("chevron-crumbs").children().not("#hide-scratch").addClass("chevron-crumb").append('<span class="chevron-outer"><span class="chevron-inner"></span></span>').filter(".active").prev().addClass("before-active")
        })
    }, b.fn.fillWindowWithMe = function (a) {
        function j() {
            i.height(0);
            var a = h.height() - (e.offset().top + e.outerHeight()) + (f.height() - g.height()),
                j = Math.max(400, a);
            i.height(j), b.isFunction(c.onResize) && c.onResize.call(d, j)
        }
        var c = b.extend({
            minHeight: 400
        }, a),
            d = b(this),
            e = b("#wrapper-container"),
            f = b("#main"),
            g = b("#not_right_side"),
            h = b(window),
            i = b(this).add(c.alsoResize);
        return j(), h.unbind("resize.fillWindowWithMe").bind("resize.fillWindowWithMe", j), this
    }, b.fn.autoGrowInput = function (a) {
        return a = b.extend({
            maxWidth: 1e3,
            minWidth: 0,
            comfortZone: 70
        }, a), this.filter("input:text").each(function () {
            var c = a.minWidth || b(this).width(),
                d = "",
                e = b(this),
                f = b("<tester/>").css({
                    position: "absolute",
                    top: -9999,
                    left: -9999,
                    width: "auto",
                    fontSize: e.css("fontSize"),
                    fontFamily: e.css("fontFamily"),
                    fontWeight: e.css("fontWeight"),
                    letterSpacing: e.css("letterSpacing"),
                    whiteSpace: "nowrap"
                }),
                g = function () {
                    setTimeout(function () {
                        if (d === (d = e.val())) return;
                        var b = d.replace(/&/g, "&amp;").replace(/\s/g, "&nbsp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
                        f.html(b);
                        var g = f.width(),
                            h = g + a.comfortZone >= c ? g + a.comfortZone : c,
                            i = e.width(),
                            j = h < i && h >= c || h > c && h < a.maxWidth;
                        j && e.width(h)
                    })
                };
            f.insertAfter(e), b(this).bind("keyup keydown blur update change", g)
        }), this
    }, b
}), define("reminders", ["jquery", "jqueryui/draggable", "jquery.instructure_misc_plugins"], function (a) {
    a(document).ready(function () {
        a("#floating_reminders").draggable(), a(".show_reminders_link").click(function (b) {
            b.preventDefault(), a(this).blur();
            var c = a("#floating_reminders"),
                d = c.clone();
            d.children().css("visibility", "hidden");
            var e = a("#reminders_icon").offset(),
                f = a("#floating_reminders").offset().top;
            c.after(d), d.css({
                width: 20,
                height: 20,
                left: e.left,
                top: e.top - f,
                opacity: 0
            }), c.css("visibility", "hidden").css("left", ""), d.animate({
                top: c.css("top"),
                left: c.css("left"),
                width: c.width(),
                height: c.height(),
                opacity: 1
            }, "slow", function () {
                a(this).remove(), c.css("visibility", "visible"), c.find("a:not(.hide_reminders_link):visible:first").focus(), a("#reminders_icon").hide()
            });
            var g = c.find(".update_session_url").attr("href")
        }), a(".hide_reminders_link").click(function (b) {
            b.preventDefault();
            var c = a(this).parents("#floating_reminders"),
                d = c.clone();
            c.after(d).css("left", -2e3), d.children().css("visibility", "hidden");
            var e = a("#reminders_icon").show().offset(),
                f = d.offset().top;
            d.animate({
                width: 20,
                height: 20,
                left: e.left,
                top: e.top - f,
                opacity: 0
            }, "slow", function () {
                a(this).remove()
            });
            var g = c.find(".update_session_url").attr("href")
        }), a(".drop_held_context_link").click(function (b) {
            b.preventDefault();
            var c = a(this).parents(".reminder");
            c.confirmDelete({
                url: a(this).attr("href"),
                message: "Are you sure you want to drop this " + c.find(".item_type").text() + "?",
                success: function (b) {
                    a(this).fadeOut("fast", function () {
                        a(this).remove(), a("#floating_reminders .reminder").length === 0 && a("#floating_reminders").fadeOut("fast", function () {
                            a(this).remove(), a("#reminders_icon").remove()
                        })
                    })
                }
            })
        })
    })
}), function () {
    define("compiled/license_help", ["i18n!license_help", "jquery", "jqueryui/dialog", "jquery.instructure_misc_plugins", "jquery.loadingImg"], function (a, b) {
        var c, d, e, f;
        return d = ["by", "nc", "nd", "sa"], e = function (a, c) {
            return b(a).toggleClass("selected", !! c).attr("aria-checked", !! c)
        }, c = function (a) {
            return e(a, !0)
        }, f = function (a) {
            return e(a, !1)
        }, b(".license_help_link").live("click", function (g) {
            var h, i;
            return g.preventDefault(), h = b("#license_help_dialog"), i = b(this).prev("select"), h.length === 0 && (h = b("<div/>").attr("id", "license_help_dialog").hide().loadingImage().appendTo("body").delegate(".option", "click", function (a) {
                var d;
                a.preventDefault(), d = !b(this).is(".selected"), e(this, d), d ? (c(h.find(".option.by")), b(this).hasClass("sa") ? f(h.find(".option.nd")) : b(this).hasClass("nd") && f(h.find(".option.sa"))) : b(this).hasClass("by") && f(h.find(".option")), h.triggerHandler("option_change")
            }).delegate(".select_license", "click", function () {
                return h.data("select") && h.data("select").val(h.data("current_license") || "private"), h.dialog("close")
            }).bind("license_change", function (a, b) {
                var e, g, i, j;
                h.find(".license").removeClass("active").filter("." + b).addClass("active"), f(h.find(".option")), h.find(".license.active").length === 0 && (b = "private", h.find(".license.private").addClass("active")), h.data("current_license", b);
                if (b.match(/^cc/)) {
                    j = [];
                    for (g = 0, i = d.length; g < i; g++) e = d[g], (e === "by" || b.match("_" + e)) && j.push(c(h.find(".option." + e)));
                    return j
                }
            }).bind("option_change", function () {
                var a, b, c, e, f;
                a = ["cc"];
                for (e = 0, f = d.length; e < f; e++) c = d[e], h.find(".option." + c).is(".selected") && a.push(c);
                return b = a.length === 1 ? "private" : a.join("_"), h.triggerHandler("license_change", b)
            }).dialog({
                autoOpen: !1,
                title: a.t("content_license_help", "Content Licensing Help"),
                width: 700
            }), b.get("/partials/_license_help.html", function (a) {
                return h.loadingImage("remove").html(a).triggerHandler("license_change", i.val() || "private")
            })), h.find(".select_license").showIf(i.length), h.data("select", i), h.triggerHandler("license_change", i.val() || "private"), h.dialog("open")
        })
    })
}.call(this), define("tinymce.editor_box", ["i18nObj", "jquery", "compiled/editor/editorAccessibility", "jqueryui/draggable", "jquery.instructure_misc_plugins", "vendor/jquery.scrollTo", "vendor/jquery.ba-tinypubsub", "vendor/scribd.view"], function (a, b, c) {
    function e() {
        this._textareas = {}, this._editors = {}, this._editor_boxes = {}
    }
    function g(a, c) {
        var d = b("#" + a + "_ifr");
        if (d.length) {
            var e = b(window).height() - (d.offset().top + c.height() + 1);
            d.height(e)
        }
        b("#" + a + "_tbl").css("height", "")
    }
    function h(a, e, h, i, j) {
        j = b.extend({}, j), j.fullHeight && b(window).resize(function () {
            g(a, j.elementToLeaveInViewport)
        }).triggerHandler("resize");
        var k = b("#" + a);
        k.data("enable_bookmarking", d);
        var l = k.width();
        l == 0 && (l = k.closest(":visible").width());
        var m = ",instructure_image,instructure_equation";
        for (var n in INST.editorButtons) INST.editorButtons.length <= INST.maxVisibleEditorButtons || n < INST.maxVisibleEditorButtons - 1 ? m = m + ",instructure_external_button_" + INST.editorButtons[n].id : m.match(/instructure_external_button_clump/) || (m += ",instructure_external_button_clump");
        INST && INST.allowMediaComments && (m += ",instructure_record");
        var o = INST && INST.equellaEnabled ? ",instructure_equella" : "";
        m += o;
        var p = "bold,italic,underline,forecolor,backcolor,removeformat,justifyleft,justifycenter,justifyright,bullist,outdent,indent,sup,sub,numlist,table,instructure_links,unlink" + m + ",fontsizeselect,formatselect",
            q = "",
            r = "";
        l < 359 && l > 0 ? (p = "bold,italic,underline,forecolor,backcolor,removeformat,justifyleft,justifycenter,justifyright", q = "outdent,indent,sup,sub,bullist,numlist,table,instructure_links,unlink" + m, r = "fontsizeselect,formatselect") : l < 600 && (p = "bold,italic,underline,forecolor,backcolor,removeformat,justifyleft,justifycenter,justifyright,outdent,indent,sup,sub,bullist,numlist", q = "table,instructure_links,unlink" + m + ",fontsizeselect,formatselect");
        var s = "/javascripts/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css,/stylesheets/compiled/tiny_like_ck_with_external_tools.css",
            t = b.extend({
                mode: "exact",
                elements: a,
                theme: "advanced",
                plugins: "autolink,instructure_external_tools,instructure_contextmenu,instructure_links,instructure_embed,instructure_image,instructure_equation,instructure_record,instructure_equella,media,paste,table,inlinepopups",
                dialog_type: "modal",
                language_load: !1,
                relative_urls: !1,
                remove_script_host: !0,
                theme_advanced_buttons1: p,
                theme_advanced_toolbar_location: "top",
                theme_advanced_toolbar_align: "center",
                theme_advanced_buttons2: q,
                theme_advanced_buttons3: r,
                theme_advanced_resize_horizontal: !1,
                theme_advanced_resizing: !0,
                theme_advanced_blockformats: "p,h2,h3,h4,pre",
                theme_advanced_more_colors: !1,
                extended_valid_elements: "iframe[src|width|height|name|align|style|class|sandbox]",
                content_css: "/stylesheets/compiled/instructure_style.css,/stylesheets/compiled/tinymce.editor_box.css",
                editor_css: s,
                auto_focus: j.focus ? a : null,
                onchange_callback: function (c) {
                    b("#" + a).trigger("change")
                },
                setup: function (a) {
                    var e = b("#" + a.editorId),
                        f = function () {
                            b(document).triggerHandler("editor_box_focus", e), b.publish("editorBox/focus", e)
                        },
                        g = function (a, c) {
                            if (c.keyCode != 9 || !c.shiftKey) return !0;
                            var d = b(a.getContainer());
                            for (;;) {
                                if (d.prevAll().find(":tabbable").andSelf().filter(":tabbable").last().focus().length) return !1;
                                d = d.parent();
                                if (!d || !d.length || d.is(document)) return !1
                            }
                        };
                    a.onClick.add(f), a.onKeyPress.add(f), a.onKeyUp.add(g), a.onActivate.add(f), a.onEvent.add(function () {
                        d && a.selection && k.data("last_bookmark", a.selection.getBookmark(1))
                    }), a.onInit.add(function () {
                        (new c(a)).accessiblize()
                    }), a.onInit.add(function () {
                        b(window).triggerHandler("resize"), b(a.contentDocument).bind("DOMNodeInserted", function (a) {
                            var c = a.target,
                                d;
                            c.nodeType === 1 && c.nodeName === "IMG" && (d = b(c).data("url")) && b(c).attr("src", tinyMCE.activeEditor.documentBaseURI.toAbsolute(d))
                        }), "onfocusout" in a.contentWindow || b(a.contentWindow).blur(function (b) {
                            !a.removed && a.undoManager.typing && (a.undoManager.typing = !1, a.undoManager.add())
                        })
                    })
                }
            }, j.tinyOptions || {});
        tinyMCE.init(t), this._textarea = k, this._editor = null, this._id = a, this._searchURL = e, this._submitURL = h, this._contentURL = i, f._addEditorBox(a, this), k.bind("blur change", function () {
            f._getEditor(a) && f._getEditor(a).isHidden() && b(this).editorBox("set_code", f._getTextArea(a).val())
        })
    }
    var d = b("body").hasClass("ie");
    b(document).ready(function () {
        d = b("body").hasClass("ie")
    }), b.extend(e.prototype, {
        _addEditorBox: function (a, c) {
            b.publish("editorBox/add", a, c), this._editor_boxes[a] = c, this._editors[a] = tinyMCE.get(a), this._textareas[a] = b("textarea#" + a)
        },
        _removeEditorBox: function (a) {
            delete this._editor_boxes[a], delete this._editors[a], delete this._textareas[a], b.publish("editorBox/remove", a), b.isEmptyObject(this._editors) && b.publish("editorBox/removeAll")
        },
        _getTextArea: function (a) {
            return this._textareas[a] || (this._textareas[a] = b("textarea#" + a)), this._textareas[a]
        },
        _getEditor: function (a) {
            return this._editors[a] || (this._editors[a] = tinyMCE.get(a)), this._editors[a]
        },
        _getEditorBox: function (a) {
            return this._editor_boxes[a]
        }
    });
    var f = new e,
        i = {
            getSelection: function () {
                var a = this.jquery ? this[0] : this;
                return ("selectionStart" in a &&
                function () {
                    var b = a.selectionEnd - a.selectionStart;
                    return {
                        start: a.selectionStart,
                        end: a.selectionEnd,
                        length: b,
                        text: a.value.substr(a.selectionStart, b)
                    }
                } || document.selection &&
                function () {
                    a.focus();
                    var b = document.selection.createRange();
                    if (b == null) return {
                        start: 0,
                        end: a.value.length,
                        length: 0
                    };
                    var c = a.createTextRange(),
                        d = c.duplicate();
                    return c.moveToBookmark(b.getBookmark()), d.setEndPoint("EndToStart", c), {
                        start: d.text.length,
                        end: d.text.length + b.text.length,
                        length: b.text.length,
                        text: b.text
                    }
                } ||
                function () {
                    return {
                        start: 0,
                        end: a.value.length,
                        length: 0
                    }
                })()
            },
            replaceSelection: function () {
                var a = this.jquery ? this[0] : this,
                    b = arguments[0] || "";
                return ("selectionStart" in a &&
                function () {
                    return a.value = a.value.substr(0, a.selectionStart) + b + a.value.substr(a.selectionEnd, a.value.length), this
                } || document.selection &&
                function () {
                    return a.focus(), document.selection.createRange().text = b, this
                } ||
                function () {
                    return a.value += b, this
                })()
            }
        };
    b.extend(b.fn, i);
    var j = 1;
    b.fn.editorBox = function (a, c) {
        var d = arguments;
        if (this.length > 1) return this.each(function () {
            var a = b(this);
            a.editorBox.apply(a, d)
        });
        var e = this.attr("id");
        if (typeof a == "string" && a != "create") {
            if (a == "get_code") return this._getContentCode(c);
            if (a == "set_code") this._setContentCode(c);
            else if (a == "insert_code") this._insertHTML(c);
            else {
                if (a == "selection_offset") return this._getSelectionOffset();
                if (a == "selection_link") return this._getSelectionLink();
                if (a == "create_link") this._linkSelection(c);
                else {
                    if (a == "focus") return this._editorFocus(c);
                    if (a == "toggle") this._toggleView();
                    else {
                        if (a == "execute") {
                            var g = [];
                            for (var i = 1; i < arguments.length; i++) g.push(arguments[i]);
                            return b.fn._execCommand.apply(this, g)
                        }
                        if (a == "destroy") this._removeEditor(c);
                        else if (a == "is_dirty") return f._getEditor(e).isDirty()
                    }
                }
            }
            return this
        }
        this.data("rich_text", !0), e || (e = "editor_box_unique_id_" + j++, this.attr("id", e));
        if (f._getEditor(e)) return this._setContentCode(this.val()), this;
        var k = "";
        a && a.search_url && (k = a.search_url);
        var l = new h(e, k, "", "", a);
        return this
    }, b.fn._execCommand = function () {
        var a = b(this).attr("id"),
            c = f._getEditor(a);
        return c && c.execCommand && c.execCommand.apply(c, arguments), this
    }, b.fn._justGetCode = function () {
        var a = this.attr("id") || "",
            b = "";
        try {
            f._getEditor(a).isHidden() ? b = f._getTextArea(a).val() : b = f._getEditor(a).getContent()
        } catch (c) {
            tinyMCE && tinyMCE.getInstanceById(a) ? b = tinyMCE.getInstanceById(a).getContent() : b = this.val() || ""
        }
        return b
    }, b.fn._getContentCode = function (a) {
        if (a == 1) {
            var b = this._justGetCode();
            this._setContentCode(b)
        }
        return this._justGetCode()
    }, b.fn._getSearchURL = function () {
        return f._getEditorBox(this.attr("id"))._searchURL
    }, b.fn._getSubmitURL = function () {
        return f._getEditorBox(this.attr("id"))._submitURL
    }, b.fn._getContentURL = function () {
        return f._getEditorBox(this.attr("id"))._contentURL
    }, b.fn._getSelectionOffset = function () {
        var a = this.attr("id"),
            c = f._getEditor(a).getContainer(),
            d = b(c).find("iframe").offset(),
            e = f._getEditor(a).selection.getNode(),
            g = b(e).offset(),
            h = b(c).scrollTop(),
            i = {
                left: d.left + g.left + 10,
                top: d.top + g.top + 10 - h
            };
        return i
    }, b.fn._getSelectionNode = function () {
        var a = this.attr("id"),
            b = f._getEditor(a).getContainer(),
            c = f._getEditor(a).selection.getNode();
        return c
    }, b.fn._getSelectionLink = function () {
        var a = this.attr("id"),
            c = tinyMCE.get(a).selection.getNode();
        while (c.nodeName != "A" && c.nodeName != "BODY" && c.parentNode) c = c.parentNode;
        if (c.nodeName == "A") {
            var d = b(c).attr("href"),
                e = b(c).attr("title");
            if (!e || e == "") e = d;
            var f = {
                url: d,
                title: e
            };
            return f
        }
        return null
    }, b.fn._toggleView = function () {
        var a = this.attr("id");
        this._setContentCode(this._getContentCode()), tinyMCE.execCommand("mceToggleEditor", !1, a), this.removeAttr("aria-hidden").filter("textarea:visible").focus()
    }, b.fn._removeEditor = function () {
        var a = this.attr("id");
        this.data("rich_text", !1), tinyMCE && tinyMCE.execCommand && (tinyMCE.execCommand("mceRemoveControl", !1, a), f._removeEditorBox(a))
    }, b.fn._setContentCode = function (a) {
        var c = this.attr("id");
        f._getTextArea(c).val(a), tinyMCE.get(c) && b.isFunction(tinyMCE.get(c).execCommand) && tinyMCE.get(c).execCommand("mceSetContent", !1, a)
    }, b.fn._insertHTML = function (a) {
        var b = this.attr("id");
        f._getEditor(b).isHidden() ? this.replaceSelection(a) : tinyMCE.get(b).execCommand("mceInsertContent", !1, a)
    }, b.fn._editorFocus = function () {
        var a = this,
            c = a.attr("id"),
            d = f._getEditor(c);
        return d ? (f._getEditor(c).isHidden() ? f._getTextArea(c).focus().select() : (tinyMCE.execCommand("mceFocus", !1, c), b.publish("editorBox/focus", a)), !0) : !1
    }, b.fn._linkSelection = function (a) {
        typeof a == "string" && (a = {
            url: a
        });
        var c = a.title,
            e = a.url || "";
        e.match(/@/) && !e.match(/\//) && !e.match(/^mailto:/) ? e = "mailto:" + e : !e.match(/^\w+:\/\//) && !e.match(/^mailto:/) && !e.match(/^\//) && (e = "http://" + e);
        var g = a.classes || "",
            h = a.text || a.title || "Link",
            i = a.target || null,
            j = b(this).attr("id");
        e.indexOf("@") != -1 ? (a.file = !1, a.image = !1, e.indexOf("mailto:") != 0 && (e = "mailto:" + e)) : e.indexOf("/") == -1 && (c = e, e = e.replace(/\s/g, ""), e = location.href + e), a.file && (g += "instructure_file_link "), a.scribdable && (g += "instructure_scribd_file ");
        var k = "";
        a.kaltura_entry_id && a.kaltura_media_type && (k = "media_comment_" + a.kaltura_entry_id, a.kaltura_media_type == "video" ? g += "instructure_video_link " : g += "instructure_audio_link "), a.image && (g += "instructure_image_thumbnail "), g = b.unique(g.split(/\s+/)).join(" ");
        var l = "";
        d && this.data("last_bookmark") && tinyMCE.get(j).selection.moveToBookmark(this.data("last_bookmark"));
        var m = tinyMCE.get(j).selection,
            n = m.getNode();
        while (n.nodeName != "A" && n.nodeName != "BODY" && n.parentNode) n = n.parentNode;
        n.nodeName != "A" && (n = null);
        var o = m.getContent();
        if (f._getEditor(j).isHidden()) {
            l = h;
            var p = b("<div><a/></div>");
            p.find("a")[k ? "attr" : "removeAttr"]("id", k).attr({
                title: c,
                href: e,
                target: i
            })[g ? "attr" : "removeAttr"]("class", g).text(l);
            var q = p.html();
            b(this).replaceSelection(q)
        } else if (!o || o == "") if (n) b(n).attr({
            href: e,
            _mce_href: e,
            title: c || "",
            id: k,
            "class": g,
            target: i
        });
        else {
            l = h;
            var p = b("<div/>");
            p.append(b("<a/>", {
                id: k,
                target: i,
                title: c,
                href: e,
                "class": g
            }).text(l)), tinyMCE.get(j).execCommand("mceInsertContent", !1, p.html())
        } else tinyMCE.get(j).execCommand("mceInsertLink", !1, {
            target: i || "",
            title: c || "",
            href: e,
            "class": g,
            id: k
        });
        var r = tinyMCE.get(j),
            s = r.selection.getNode();
        s.nodeName != "A" && (s = b(s).children("a:last")[0]);
        if (s) {
            var t = {
                top: s.offsetTop,
                left: s.offsetLeft
            },
                u = s;
            while ((u = u.offsetParent) && u.tagName != "BODY") t.top = t.top + u.offsetTop || 0, t.left = t.left + u.offsetLeft || 0;
            var v = r.getContainer(),
                w = b(v).find("iframe").offset(),
                x = b(r.dom.doc).find("html").scrollTop() || b(r.dom.doc).find("body").scrollTop(),
                y = {
                    left: w.left + t.left,
                    top: w.top + t.top - x
                };
            b(s).indicate({
                offset: y,
                singleFlash: !0,
                scroll: !0,
                container: b(v).find("iframe")
            })
        }
    }
}), function () {
    define("compiled/badge_counts", ["jquery"], function (a) {
        return a(document).ready(function () {
            var b, c, d, e, f;
            if (ENV.badge_counts) {
                e = ENV.badge_counts, f = [];
                for (c in e) d = e[c], d > 0 ? (c === "submissions" && (c = "grades"), b = a("<b/>").append(d).addClass("nav-badge"), f.push(a("#section-tabs ." + c).append(b))) : f.push(void 0);
                return f
            }
        })
    })
}.call(this), define("translations/_core", ["i18nObj", "jquery"], function (a, b) {
    b.extend(!0, a, {
        translations: {
            ar: {
                date: {
                    abbr_day_names: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"],
                    abbr_month_names: [null, "يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"],
                    day_names: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"],
                    days: {
                        today: "اليوم",
                        today_lower: "اليوم",
                        tomorrow: "غدًا",
                        yesterday: "أمس"
                    },
                    formats: {
                        date_at_time: "%b %-d at %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %-d، %Y",
                        long_with_weekday: "%A، %B %-d",
                        medium: "%b %e, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d، %Y",
                        "short": "%b %e",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a، %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            few: "حوالي %{count} ساعات",
                            many: "حوالي %{count} ساعات",
                            one: "حوالي ساعة واحدة",
                            other: "حوالي %{count} ساعات",
                            two: "حوالي %{count} ساعات",
                            zero: "حوالي %{count} ساعات"
                        },
                        about_x_months: {
                            few: "حوالي %{count} أشهر",
                            many: "حوالي %{count} أشهر",
                            one: "حوالي شهر واحد",
                            other: "حوالي %{count} أشهر",
                            two: "حوالي %{count} أشهر",
                            zero: "حوالي %{count} أشهر"
                        },
                        about_x_years: {
                            few: "حوالي %{count} سنوات",
                            many: "حوالي %{count} سنوات",
                            one: "حوالي سنة واحدة",
                            other: "حوالي %{count} سنوات",
                            two: "حوالي %{count} سنوات",
                            zero: "حوالي %{count} سنوات"
                        },
                        almost_x_years: {
                            few: "%{count} سنوات تقريبًا",
                            many: "%{count} سنوات تقريبًا",
                            one: "سنة واحدة تقريبًا",
                            other: "%{count} سنوات تقريبًا",
                            two: "%{count} سنوات تقريبًا",
                            zero: "%{count} سنوات تقريبًا"
                        },
                        half_a_minute: "نصف دقيقة",
                        less_than_x_minutes: {
                            few: "أقل من %{count} دقائق",
                            many: "أقل من %{count} دقائق",
                            one: "أقل من دقيقة واحدة",
                            other: "أقل من %{count} دقائق",
                            two: "أقل من %{count} دقائق",
                            zero: "أقل من %{count} دقائق"
                        },
                        less_than_x_seconds: {
                            few: "أقل من %{count} ثوان",
                            many: "أقل من %{count} ثوان",
                            one: "أقل من ثانية واحدة",
                            other: "أقل من %{count} ثوان",
                            two: "أقل من %{count} ثوان",
                            zero: "أقل من %{count} ثوان"
                        },
                        over_x_years: {
                            few: "أكثر من %{count} سنوات",
                            many: "أكثر من %{count} سنوات",
                            one: "أكثر من سنة واحدة",
                            other: "أكثر من %{count} سنوات",
                            two: "أكثر من %{count} سنوات",
                            zero: "أكثر من %{count} سنوات"
                        },
                        x_days: {
                            few: "%{count} من الأيام",
                            many: "%{count} من الأيام",
                            one: "يوم واحد",
                            other: "%{count} من الأيام",
                            two: "%{count} من الأيام",
                            zero: "%{count} يوم"
                        },
                        x_minutes: {
                            few: "%{count} دقائق",
                            many: "%{count} دقائق",
                            one: "دقيقة واحدة",
                            other: "%{count} دقائق",
                            two: "%{count} دقائق",
                            zero: "%{count} دقائق"
                        },
                        x_months: {
                            few: "%{count} أشهر",
                            many: "%{count} أشهر",
                            one: "شهر واحد",
                            other: "%{count} أشهر",
                            two: "%{count} أشهر",
                            zero: "%{count} أشهر"
                        },
                        x_seconds: {
                            few: "%{count} ثوان",
                            many: "%{count} ثوان",
                            one: "ثانية واحدة",
                            other: "%{count} ثوان",
                            two: "%{count} ثوان",
                            zero: "%{count} ثوان"
                        }
                    },
                    prompts: {
                        day: "اليوم",
                        hour: "ساعة",
                        minute: "دقيقة",
                        month: "الشهر",
                        second: "ثوانٍ",
                        year: "العام"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    few: "وحدات بايت",
                                    many: "وحدات بايت",
                                    one: "بايت",
                                    other: "وحدات بايت",
                                    two: "وحدات بايت",
                                    zero: "وحدات بايت"
                                },
                                gb: "جيجابايت",
                                kb: "كيلوبايت",
                                mb: "ميجابايت",
                                tb: "تيرابايت"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: "، و ",
                        or: {
                            last_word_connector: "، أو ",
                            two_words_connector: " أو "
                        },
                        two_words_connector: " و ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "تفاعل واحصل على المساعدة من أقرانك.",
                        community_support_forums: "منتديات دعم المجتمع",
                        contact_support: "دعم الاتصال",
                        contact_support_sub_text: "الحصول على مساعدة للمشكلات حسب الوقت.",
                        curriculum_assessment_errata: "أخطاء المنهج الدراسي/التقييم",
                        curriculum_assessment_errata_description: 'عرض أخطاء التقييم والمناهج الدراسية التي تم الإعلام عنها مسبقًا. البحث عن "الأخطاء المطبعية".',
                        networking_academy_description: "عرض إجابات Cisco عن الأسئلة الشائعة.",
                        networking_academy_faqs: "الأسئلة الشائعة حول أكاديمية الشبكات"
                    },
                    select: {
                        prompt: "الرجاء تحديد"
                    }
                },
                time: {
                    am: "صباحًا",
                    count_hours_ago: {
                        few: "منذ %{count} ساعة مضت",
                        many: "منذ %{count} ساعة مضت",
                        one: "منذ ساعة مضت",
                        other: "منذ %{count} ساعة مضت",
                        two: "منذ %{count} ساعة مضت",
                        zero: "منذ %{count} ساعة مضت"
                    },
                    count_minutes_ago: {
                        few: "منذ %{count} دقيقة مضت",
                        many: "منذ %{count} دقيقة مضت",
                        one: "منذ دقيقة مضت",
                        other: "منذ %{count} دقيقة مضت",
                        two: "منذ %{count} دقيقة مضت",
                        zero: "منذ %{count} دقيقة مضت"
                    },
                    due_date: "%{date} حسب %{time}",
                    event: "%{date} في %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "منذ أقل من دقيقة",
                    pm: "مساءً",
                    ranges: {
                        different_days: "%{start_date_and_time} إلى %{end_date_and_time}",
                        same_day: "%{date} من %{start_time} إلى %{end_time}",
                        times: "%{start_time} إلى %{end_time}"
                    },
                    unknown_date: "تاريخ غير معروف",
                    with_ago: "منذ %{time}"
                }
            },
            de: {
                date: {
                    abbr_day_names: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
                    abbr_month_names: [null, "Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
                    day_names: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
                    days: {
                        today: "Heute",
                        today_lower: "heute",
                        tomorrow: "Morgen",
                        yesterday: "Gestern"
                    },
                    formats: {
                        date_at_time: "%b %-d um %l:%M%P",
                        "default": "%d.%m.%Y",
                        "long": "%B %-d, %Y",
                        long_with_weekday: "%A, %B %-d",
                        medium: "%d. %b %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%d. %b",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "etwa 1 Stunde",
                            other: "etwa %{count} Stunden"
                        },
                        about_x_months: {
                            one: "etwa 1 Monat",
                            other: "etwa %{count} Monate"
                        },
                        about_x_years: {
                            one: "etwa 1 Jahr",
                            other: "etwa %{count} Jahre"
                        },
                        almost_x_years: {
                            one: "fast 1 Jahr",
                            other: "fast %{count} Jahre"
                        },
                        half_a_minute: "eine halbe Minute",
                        less_than_x_minutes: {
                            one: "kürzer als 1 Minute",
                            other: "kürzer als %{count} Minuten"
                        },
                        less_than_x_seconds: {
                            one: "kürzer als 1 Sekunde",
                            other: "kürzer als %{count} Sekunden"
                        },
                        over_x_years: {
                            one: "länger als 1 Jahr",
                            other: "länger als %{count} Jahre"
                        },
                        x_days: {
                            one: "1 Tag",
                            other: "%{count} Tagen"
                        },
                        x_minutes: {
                            one: "1 Minute",
                            other: "%{count} Minuten"
                        },
                        x_months: {
                            one: "1 Monat",
                            other: "%{count} Monate"
                        },
                        x_seconds: {
                            one: "1 Sekunden",
                            other: "%{count} Sekunden"
                        }
                    },
                    prompts: {
                        day: "Tag",
                        hour: "Stunde",
                        minute: "Minute",
                        month: "Monat",
                        second: "Sekunden",
                        year: "Jahr"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "Byte",
                                    other: "Bytes"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", und ",
                        or: {
                            last_word_connector: ", oder ",
                            two_words_connector: " oder "
                        },
                        two_words_connector: " und ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Mit Ihren Peers interagieren und Hilfe von ihnen anfordern.",
                        community_support_forums: "Community-Support-Foren",
                        contact_support: "Support kontaktieren",
                        contact_support_sub_text: "Hilfestellung bei zeitkritischen Problemen erhalten.",
                        curriculum_assessment_errata: "Lehrplan-/Leistungstestfehler",
                        curriculum_assessment_errata_description: 'Bereits gemeldete Leistungstest- und Lehrplanfehler anzeigen. Nach "Fehler" suchen.',
                        networking_academy_description: "Antworten von Cisco zu den am häufigsten gestellten Fragen anzeigen.",
                        networking_academy_faqs: "Häufig gestellte Fragen zur Networking Academy"
                    },
                    select: {
                        prompt: "Bitte auswählen"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "vor 1 Stunde",
                        other: "vor %{count} Stunden"
                    },
                    count_minutes_ago: {
                        one: "vor 1 Minute",
                        other: "vor %{count} Minuten"
                    },
                    due_date: "%{date} bis %{time}",
                    event: "%{date} um %{time}",
                    formats: {
                        "default": "%a, %d.%b.%Y %H:%M:%S %z",
                        "long": "%d. %B %Y %H:%M",
                        "short": "%d.%b. %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "vor weniger als einer Minute",
                    pm: "pm",
                    ranges: {
                        different_days: "%{start_date_and_time} bis %{end_date_and_time}",
                        same_day: "Am %{date} von %{start_time} bis %{end_time}",
                        times: "%{start_time} bis %{end_time}"
                    },
                    unknown_date: "Unbekanntes Datum",
                    with_ago: "vor %{time}"
                }
            },
            "el-gr": {},
            "en-AU": {
                date: {
                    abbr_day_names: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
                    abbr_month_names: [null, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
                    day_names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
                    days: {
                        today: "Today",
                        today_lower: "today",
                        tomorrow: "Tomorrow",
                        yesterday: "Yesterday"
                    },
                    formats: {
                        date_at_time: "%b %-d at %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %d, %Y",
                        medium: "%b %-d, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %-d",
                        short_month: "%b",
                        short_weekday: "%a",
                        weekday: "%A"
                    },
                    month_names: [null, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "about 1 hour",
                            other: "about %{count} hours"
                        },
                        about_x_months: {
                            one: "about 1 month",
                            other: "about %{count} months"
                        },
                        about_x_years: {
                            one: "about 1 year",
                            other: "about %{count} years"
                        },
                        almost_x_years: {
                            one: "almost 1 year",
                            other: "almost %{count} years"
                        },
                        half_a_minute: "half a minute",
                        less_than_x_minutes: {
                            one: "less than a minute",
                            other: "less than %{count} minutes"
                        },
                        less_than_x_seconds: {
                            one: "less than 1 second",
                            other: "less than %{count} seconds"
                        },
                        over_x_years: {
                            one: "over 1 year",
                            other: "over %{count} years"
                        },
                        x_days: {
                            one: "1 day",
                            other: "%{count} days"
                        },
                        x_minutes: {
                            one: "1 minute",
                            other: "%{count} minutes"
                        },
                        x_months: {
                            one: "1 month",
                            other: "%{count} months"
                        },
                        x_seconds: {
                            one: "1 second",
                            other: "%{count} seconds"
                        }
                    },
                    prompts: {
                        day: "Day",
                        hour: "Hour",
                        minute: "Minute",
                        month: "Month",
                        second: "Seconds",
                        year: "Year"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "Byte",
                                    other: "Bytes"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", and ",
                        or: {
                            last_word_connector: ", or ",
                            two_words_connector: " or "
                        },
                        two_words_connector: " and ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Interact with and get assistance from your peers.",
                        community_support_forums: "Community Support Forums",
                        contact_support: "Contact Support",
                        contact_support_sub_text: "Get assistance with time-sensitive issues.",
                        curriculum_assessment_errata: "Curriculum/Assessment Errata",
                        curriculum_assessment_errata_description: 'View already reported assessment and curricula errors. Search for "errata."',
                        networking_academy_description: "View Cisco answers to the most commonly asked questions.",
                        networking_academy_faqs: "Networking Academy FAQs"
                    },
                    select: {
                        prompt: "Please select"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 hour ago",
                        other: "%{count} hours ago"
                    },
                    count_minutes_ago: {
                        one: "1 minute ago",
                        other: "%{count} minutes ago"
                    },
                    due_date: "%{date} by %{time}",
                    event: "%{date} at %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "less than a minute ago",
                    pm: "pm",
                    ranges: {
                        different_days: "%{start_date_and_time} to %{end_date_and_time}",
                        same_day: "%{date} from %{start_time} to %{end_time}",
                        times: "%{start_time} to %{end_time}"
                    },
                    unknown_date: "Unknown date",
                    with_ago: "%{time} ago"
                }
            },
            "en-GB": {
                date: {
                    abbr_day_names: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
                    abbr_month_names: [null, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
                    day_names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
                    days: {
                        today: "Today",
                        today_lower: "today",
                        tomorrow: "Tomorrow",
                        yesterday: "Yesterday"
                    },
                    formats: {
                        date_at_time: "%b %-d at %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %d, %Y",
                        medium: "%b %-d, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %-d",
                        short_month: "%b",
                        short_weekday: "%a",
                        weekday: "%A"
                    },
                    month_names: [null, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "about 1 hour",
                            other: "about %{count} hours"
                        },
                        about_x_months: {
                            one: "about 1 month",
                            other: "about %{count} months"
                        },
                        about_x_years: {
                            one: "about 1 year",
                            other: "about %{count} years"
                        },
                        almost_x_years: {
                            one: "almost 1 year",
                            other: "almost %{count} years"
                        },
                        half_a_minute: "half a minute",
                        less_than_x_minutes: {
                            one: "less than a minute",
                            other: "less than %{count} minutes"
                        },
                        less_than_x_seconds: {
                            one: "less than 1 second",
                            other: "less than %{count} seconds"
                        },
                        over_x_years: {
                            one: "over 1 year",
                            other: "over %{count} years"
                        },
                        x_days: {
                            one: "1 day",
                            other: "%{count} days"
                        },
                        x_minutes: {
                            one: "1 minute",
                            other: "%{count} minutes"
                        },
                        x_months: {
                            one: "1 month",
                            other: "%{count} months"
                        },
                        x_seconds: {
                            one: "1 second",
                            other: "%{count} seconds"
                        }
                    },
                    prompts: {
                        day: "Day",
                        hour: "Hour",
                        minute: "Minute",
                        month: "Month",
                        second: "Seconds",
                        year: "Year"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "Byte",
                                    other: "Bytes"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", and ",
                        or: {
                            last_word_connector: ", or ",
                            two_words_connector: " or "
                        },
                        two_words_connector: " and ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Interact with and get assistance from your peers.",
                        community_support_forums: "Community Support Forums",
                        contact_support: "Contact support",
                        contact_support_sub_text: "Get assistance with time-sensitive issues.",
                        curriculum_assessment_errata: "Curriculum/Assessment errata",
                        curriculum_assessment_errata_description: 'View already reported assessment and curricula errors. Search for "errata."',
                        networking_academy_description: "View Cisco answers to the most commonly asked questions.",
                        networking_academy_faqs: "Networking Academy FAQs"
                    },
                    select: {
                        prompt: "Please select"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 hour ago",
                        other: "%{count} hours ago"
                    },
                    count_minutes_ago: {
                        one: "1 minute ago",
                        other: "%{count} minutes ago"
                    },
                    due_date: "%{date} by %{time}",
                    event: "%{date} at %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "less than a minute ago",
                    pm: "pm",
                    ranges: {
                        different_days: "%{start_date_and_time} to %{end_date_and_time}",
                        same_day: "%{date} from %{start_time} to %{end_time}",
                        times: "%{start_time} to %{end_time}"
                    },
                    unknown_date: "Unknown date",
                    with_ago: "%{time} ago"
                }
            },
            es: {
                date: {
                    abbr_day_names: ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"],
                    abbr_month_names: [null, "Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
                    day_names: ["Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"],
                    days: {
                        today: "Hoy",
                        today_lower: "hoy",
                        tomorrow: "Mañana",
                        yesterday: "Ayer"
                    },
                    formats: {
                        date_at_time: "%b %-d en %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %d, %Y",
                        medium: "%b %e, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %e",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "casi 1 hora",
                            other: "casi %{count} horas"
                        },
                        about_x_months: {
                            one: "casi 1 mes",
                            other: "casi %{count} meses"
                        },
                        about_x_years: {
                            one: "casi 1 año",
                            other: "casi %{count} años"
                        },
                        almost_x_years: {
                            one: "casi 1 año",
                            other: "casi %{count} años"
                        },
                        half_a_minute: "medio minuto",
                        less_than_x_minutes: {
                            one: "menos de un minuto",
                            other: "menos de %{count} minutos"
                        },
                        less_than_x_seconds: {
                            one: "menos de 1 segundo",
                            other: "menos de %{count} segundos"
                        },
                        over_x_years: {
                            one: "más de 1 año",
                            other: "más de %{count} años"
                        },
                        x_days: {
                            one: "1 día",
                            other: "%{count} días"
                        },
                        x_minutes: {
                            one: "1 minuto",
                            other: "%{count} minutos"
                        },
                        x_months: {
                            one: "1 mes",
                            other: "%{count} meses"
                        },
                        x_seconds: {
                            one: "1 segundo",
                            other: "%{count} segundos"
                        }
                    },
                    prompts: {
                        day: "Día",
                        hour: "Hora",
                        minute: "Minuto",
                        month: "Mes",
                        second: "Segundos",
                        year: "Año"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "Byte",
                                    other: "Bytes"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", y ",
                        or: {
                            last_word_connector: ", o ",
                            two_words_connector: " o "
                        },
                        two_words_connector: " y ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Interactuar y obtener ayuda de sus compañeros.",
                        community_support_forums: "Foros de asistencia de la comunidad",
                        contact_support: "Póngase en contacto con Asistencia técnica",
                        contact_support_sub_text: "Obtenga asistencia para cuestiones urgentes",
                        curriculum_assessment_errata: "Erratas de currículum/evaluación",
                        curriculum_assessment_errata_description: 'Ver errores de currículum/evaluación ya comunicados. Buscar "erratas".',
                        networking_academy_description: "Ver las respuestas de Cisco a las preguntas más frecuentes.",
                        networking_academy_faqs: "Preguntas más frecuentes de Networking Academy"
                    },
                    select: {
                        prompt: "Por favor seleccione"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "hace 1 hora",
                        other: "hace %{count} horas"
                    },
                    count_minutes_ago: {
                        one: "hace 1 minuto",
                        other: "hace %{count} minutos"
                    },
                    due_date: "%{date} hasta %{time}",
                    event: "%{date} en %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "hace menos de un minuto",
                    pm: "pm",
                    ranges: {
                        different_days: "%{start_date_and_time} hasta %{end_date_and_time}",
                        same_day: "%{date} desde %{start_time} hasta %{end_time}",
                        times: "%{start_time} hasta %{end_time}"
                    },
                    unknown_date: "Fecha desconocida",
                    with_ago: "hace %{time}"
                }
            },
            fr: {
                date: {
                    abbr_day_names: ["Dim.", "Lun.", "Mar.", "Mer.", "Jeu.", "Ven.", "Sam."],
                    abbr_month_names: [null, "Jan.", "Févr.", "Mars", "Avr.", "Mai", "Juin", "Juill.", "Août", "Sept.", "Oct.", "Nov.", "Déc."],
                    day_names: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
                    days: {
                        today: "Aujourd’hui",
                        today_lower: "aujourd’hui",
                        tomorrow: "Demain",
                        yesterday: "Hier"
                    },
                    formats: {
                        date_at_time: "%b %-d à %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %-d, %Y",
                        long_with_weekday: "%A, %B %-d",
                        medium: "%b %e, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-j, %A",
                        "short": "%b %e",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "1 heure environ",
                            other: "%{count} heures environ"
                        },
                        about_x_months: {
                            one: "1 mois environ",
                            other: "%{count} mois environ"
                        },
                        about_x_years: {
                            one: "1 an environ",
                            other: "%{count} ans environ"
                        },
                        almost_x_years: {
                            one: "presque 1 an",
                            other: "presque %{count} ans"
                        },
                        half_a_minute: "30 secondes",
                        less_than_x_minutes: {
                            one: "moins d’1 minute",
                            other: "moins de %{count} minutes"
                        },
                        less_than_x_seconds: {
                            one: "moins d’1 seconde",
                            other: "moins de %{count} secondes"
                        },
                        over_x_years: {
                            one: "plus d’1 an",
                            other: "plus de %{count} ans"
                        },
                        x_days: {
                            one: "1 jour",
                            other: "%{count} jours"
                        },
                        x_minutes: {
                            one: "1 minute",
                            other: "%{count} minutes"
                        },
                        x_months: {
                            one: "1 mois",
                            other: "%{count} mois"
                        },
                        x_seconds: {
                            one: "1 seconde",
                            other: "%{count} secondes"
                        }
                    },
                    prompts: {
                        day: "Jour",
                        hour: "Heure",
                        minute: "Minute",
                        month: "Mois",
                        second: "Secondes",
                        year: "Année"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "Octet",
                                    other: "Octets"
                                },
                                gb: "Go",
                                kb: "Ko",
                                mb: "Mo",
                                tb: "To"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: "et ",
                        or: {
                            last_word_connector: "ou ",
                            two_words_connector: " ou "
                        },
                        two_words_connector: " et ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Interagissez avec les autres et demandez-leur de l’aide.",
                        community_support_forums: "Forums d’assistance de la communauté",
                        contact_support: "Contacter l’assistance technique",
                        contact_support_sub_text: "Obtenir de l’aide pour les problèmes urgents",
                        curriculum_assessment_errata: "Errata dans le programme ou l’évaluation",
                        curriculum_assessment_errata_description: "Consultez les erreurs déjà signalées pour le programme et l’évaluation. Recherchez « errata ».",
                        networking_academy_description: "Consultez les réponses de Cisco aux questions les plus fréquentes.",
                        networking_academy_faqs: "FAQ Networking Academy"
                    },
                    select: {
                        prompt: "Effectuez une sélection"
                    }
                },
                time: {
                    am: "matin",
                    count_hours_ago: {
                        one: "il y a 1 heure",
                        other: "il y a %{count} heures"
                    },
                    count_minutes_ago: {
                        one: "il y a 1 minute",
                        other: "il y a %{count} minutes"
                    },
                    due_date: "%{date} à %{time}",
                    event: "%{date} à %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "il y a moins d’1 minute",
                    pm: "après-midi",
                    ranges: {
                        different_days: "%{start_date_and_time} jusqu’au %{end_date_and_time}",
                        same_day: "%{date} de %{start_time} à %{end_time}",
                        times: "%{start_time} à %{end_time}"
                    },
                    unknown_date: "Date inconnue",
                    with_ago: "il y a %{time}"
                }
            },
            hi: {},
            hu: {},
            "it-it": {},
            ja: {
                date: {
                    abbr_day_names: ["日", "月", "火", "水", "木", "金", "土"],
                    abbr_month_names: [null, "1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"],
                    day_names: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"],
                    days: {
                        today: "本日",
                        today_lower: "本日",
                        tomorrow: "明日",
                        yesterday: "昨日"
                    },
                    formats: {
                        date_at_time: "%b %-d %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %-d, %Y",
                        long_with_weekday: "%A, %B %-d",
                        medium: "%b %e, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %e",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "約 %{count} 時間",
                            other: "約 %{count} 時間"
                        },
                        about_x_months: {
                            one: "約 %{count} か月",
                            other: "約 %{count} か月"
                        },
                        about_x_years: {
                            one: "約 %{count} 年",
                            other: "約 %{count} 年"
                        },
                        almost_x_years: {
                            one: "ほぼ %{count} 年",
                            other: "ほぼ %{count} 年"
                        },
                        half_a_minute: "30 秒",
                        less_than_x_minutes: {
                            one: "%{count} 分未満",
                            other: "%{count} 分未満"
                        },
                        less_than_x_seconds: {
                            one: "%{count} 秒未満",
                            other: "%{count} 秒未満"
                        },
                        over_x_years: {
                            one: "%{count} 年以上",
                            other: "%{count} 年以上"
                        },
                        x_days: {
                            one: "%{count} 日",
                            other: "%{count} 日"
                        },
                        x_minutes: {
                            one: "%{count} 分",
                            other: "%{count} 分"
                        },
                        x_months: {
                            one: "%{count} か月",
                            other: "%{count} か月"
                        },
                        x_seconds: {
                            one: "%{count} 秒",
                            other: "%{count} 秒"
                        }
                    },
                    prompts: {
                        day: "日",
                        hour: "時",
                        minute: "分",
                        month: "月",
                        second: "秒",
                        year: "年"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "バイト",
                                    other: "バイト"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: "、および ",
                        or: {
                            last_word_connector: "、または ",
                            two_words_connector: " または "
                        },
                        two_words_connector: " および ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "ピアと交流し、支援を得ます。",
                        community_support_forums: "コミュニティ サポート フォーラム",
                        contact_support: "サポートに問い合わせ",
                        contact_support_sub_text: "緊急の問題について問い合わせます。",
                        curriculum_assessment_errata: "カリキュラム/アセスメント正誤表",
                        curriculum_assessment_errata_description: '既に報告されているアセスメントおよびカリキュラムのエラーを表示します。"正誤表" を検索してください。',
                        networking_academy_description: "最も一般的な質問に対する Cisco の回答を表示します。",
                        networking_academy_faqs: "ネットワーキング アカデミーの FAQ"
                    },
                    select: {
                        prompt: "選択してください"
                    }
                },
                time: {
                    am: "午前",
                    count_hours_ago: {
                        one: "%{count} 時間前",
                        other: "%{count} 時間前"
                    },
                    count_minutes_ago: {
                        one: "%{count} 分前",
                        other: "%{count} 分前"
                    },
                    due_date: "%{date} 終了日 %{time}",
                    event: "%{date} 於  %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "1 分前未満",
                    pm: "午後",
                    ranges: {
                        different_days: "%{start_date_and_time} ～ %{end_date_and_time}",
                        same_day: "%{date} の %{start_time} ～ %{end_time}",
                        times: "%{start_time} ～ %{end_time}"
                    },
                    unknown_date: "不明な日付です",
                    with_ago: "%{time} 前"
                }
            },
            ko: {
                date: {
                    abbr_day_names: ["일", "월", "화", "수", "목", "금", "토"],
                    abbr_month_names: [null, "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
                    day_names: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
                    days: {
                        today: "오늘",
                        today_lower: "오늘",
                        tomorrow: "내일",
                        yesterday: "어제"
                    },
                    formats: {
                        date_at_time: "%b %-d at %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %d, %Y",
                        medium: "%b %-d, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %-d",
                        short_month: "%b",
                        short_weekday: "%a",
                        weekday: "%A"
                    },
                    month_names: [null, "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "약 %{count}시간",
                            other: "약 %{count}시간"
                        },
                        about_x_months: {
                            one: "약 %{count}개월",
                            other: "약 %{count}개월"
                        },
                        about_x_years: {
                            one: "약 %{count}년",
                            other: "약 %{count}년"
                        },
                        almost_x_years: {
                            one: "거의 %{count}년",
                            other: "거의 %{count}년"
                        },
                        half_a_minute: "30초",
                        less_than_x_minutes: {
                            one: "%{count}분 이내",
                            other: "%{count}분 이내"
                        },
                        less_than_x_seconds: {
                            one: "%{count}초 이내",
                            other: "%{count}초 이내"
                        },
                        over_x_years: {
                            one: "%{count}년 이상",
                            other: "%{count}년 이상"
                        },
                        x_days: {
                            one: "%{count}일",
                            other: "%{count}일"
                        },
                        x_minutes: {
                            one: "%{count}분",
                            other: "%{count}분"
                        },
                        x_months: {
                            one: "%{count}개월",
                            other: "%{count}개월"
                        },
                        x_seconds: {
                            one: "%{count}초",
                            other: "%{count}초"
                        }
                    },
                    prompts: {
                        day: "일",
                        hour: "시",
                        minute: "분",
                        month: "월",
                        second: "초",
                        year: "년"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "₩"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "바이트",
                                    other: "바이트"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", ",
                        or: {
                            last_word_connector: " 또는 ",
                            two_words_connector: " 또는 "
                        },
                        two_words_connector: " 와(과) ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "동료와 교류하고 도움을 받을 수 있습니다.",
                        community_support_forums: "커뮤니티 사용자 지원 포럼",
                        contact_support: "지원팀에 문의",
                        contact_support_sub_text: "시간이 중요한 이슈에 대해 지원을 받습니다.",
                        curriculum_assessment_errata: "교과 과정/평가 정오표",
                        curriculum_assessment_errata_description: '이미 보고된 평가와 교과 과정 오류를 봅니다. "정오표"를 검색하십시오.',
                        networking_academy_description: "대부분의 자주 묻는 질문에 대해서는 Cisco의 답변을 보십시오.",
                        networking_academy_faqs: "Networking Academy FAQ"
                    },
                    select: {
                        prompt: "선택해 주십시오."
                    }
                },
                time: {
                    am: "오전",
                    count_hours_ago: {
                        one: "%{count}시간 전",
                        other: "%{count}시간 전"
                    },
                    count_minutes_ago: {
                        one: "%{count}분 전",
                        other: "%{count}분 전"
                    },
                    due_date: "%{date} %{time}까지",
                    event: "%{date} %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "1분 전 이내",
                    pm: "오후",
                    ranges: {
                        different_days: "%{start_date_and_time}부터 %{end_date_and_time}까지",
                        same_day: "%{date} %{start_time}부터 %{end_time}까지",
                        times: "%{start_time}부터 %{end_time}까지"
                    },
                    unknown_date: "알 수 없는 날짜",
                    with_ago: "%{time} 전"
                }
            },
            "ko-kr": {},
            nl: {
                date: {
                    abbr_day_names: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"],
                    abbr_month_names: [null, "Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
                    day_names: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"],
                    days: {
                        today: "Vandaag",
                        today_lower: "vandaag",
                        tomorrow: "Morgen",
                        yesterday: "Gisteren"
                    },
                    formats: {
                        date_at_time: "%b %-d om %l:%M%P",
                        "default": "%d-%m-%Y",
                        "long": "%d %B %Y",
                        medium: "%d %b %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%-d %b",
                        short_month: "%b",
                        short_weekday: "%a",
                        weekday: "%A"
                    },
                    month_names: [null, "Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "ongeveer %{count} uren",
                            other: "ongeveer %{count} uren"
                        },
                        about_x_months: {
                            one: "ongeveer 1 maand",
                            other: "ongeveer %{count} maanden"
                        },
                        about_x_years: {
                            one: "ongeveer 1 jaar",
                            other: "ongeveer %{count} jaar"
                        },
                        almost_x_years: {
                            one: "bijna 1 jaar",
                            other: "bijna %{count} jaar"
                        },
                        half_a_minute: "een halve minuut",
                        less_than_x_minutes: {
                            one: "minder dan 1 minuut",
                            other: "minder dan %{count} minuten"
                        },
                        less_than_x_seconds: {
                            one: "minder dan 1 seconde",
                            other: "minder dan %{count} seconden"
                        },
                        over_x_years: {
                            one: "meer dan 1 jaar",
                            other: "meer dan %{count} jaar"
                        },
                        x_days: {
                            one: "1 dag",
                            other: "%{count} dagen"
                        },
                        x_minutes: {
                            one: "%{count} minuten",
                            other: "%{count} minuten"
                        },
                        x_months: {
                            one: "1 maand",
                            other: "%{count} maanden"
                        },
                        x_seconds: {
                            one: "1 seconde",
                            other: "%{count} seconden"
                        }
                    },
                    prompts: {
                        day: "Dag",
                        hour: "Uur",
                        minute: "Minuut",
                        month: "Maand",
                        second: "Seconden",
                        year: "Jaar"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "byte",
                                    other: "Bytes"
                                },
                                gb: "GB",
                                kb: "kB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", en",
                        or: {
                            last_word_connector: ", of",
                            two_words_connector: "of"
                        },
                        two_words_connector: "en",
                        words_connector: ","
                    },
                    help_menu: {
                        community_support_description: "Communiceer met en krijg hulp van medecursisten.",
                        community_support_forums: "Community Support Forums",
                        contact_support: "Neem contact op met ondersteuning",
                        contact_support_sub_text: "Krijg hulp bij urgente zaken.",
                        curriculum_assessment_errata: "Curriculum-/opdrachterrata",
                        curriculum_assessment_errata_description: 'Bekijk reeds gerapporteerde beoordelings- en curriculumfouten. Zoek op "errata".',
                        networking_academy_description: "Bekijk Cisco-antwoorden op de meest gestelde vragen.",
                        networking_academy_faqs: "Networking Academy-FAQ's"
                    },
                    select: {
                        prompt: "Selecteer"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 uur geleden",
                        other: "%{count} uur geleden"
                    },
                    count_minutes_ago: {
                        one: "1 minute geleden",
                        other: "%{count} minuten geleden"
                    },
                    due_date: "%{date} om %{time}",
                    event: "%{date} om %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "minder dan een minuut geleden",
                    pm: "pm",
                    ranges: {
                        different_days: "%{start_date_and_time} tot %{end_date_and_time}",
                        same_day: "%{date} van %{start_time} tot %{end_time}",
                        times: "%{start_time} tot %{end_time}"
                    },
                    unknown_date: "Onbekende datum",
                    with_ago: "%{time} geleden"
                }
            },
            pl: {
                date: {
                    abbr_day_names: ["Nd", "Pn", "Wt", "Śr", "Cz", "Pt", "So"],
                    abbr_month_names: [null, "Sty", "Lut", "Mar", "Kwi", "Maj", "Czer", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"],
                    day_names: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"],
                    days: {
                        today: "Dzisiaj",
                        today_lower: "dzisiaj",
                        tomorrow: "Jutro",
                        yesterday: "Wczoraj"
                    },
                    formats: {
                        date_at_time: "%b %-d at %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %-d, %Y",
                        long_with_weekday: "%A, %B %-d",
                        medium: "%b %e, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %e",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            few: "około %{count} godziny",
                            one: "około 1 godziny",
                            other: "około %{count} godzin"
                        },
                        about_x_months: {
                            few: "około %{count} miesięcy",
                            one: "około 1 miesiąca",
                            other: "około %{count} miesięcy"
                        },
                        about_x_years: {
                            few: "około %{count} lata",
                            one: "około 1 roku",
                            other: "około %{count} lat"
                        },
                        almost_x_years: {
                            few: "prawie %{count} lata",
                            one: "prawie 1 rok",
                            other: "prawie %{count} lat"
                        },
                        half_a_minute: "pół minuty",
                        less_than_x_minutes: {
                            few: "mniej niż %{count} minuty",
                            one: "mniej niż minuta",
                            other: "mniej niż %{count} minut"
                        },
                        less_than_x_seconds: {
                            few: "mniej niż %{count} sekundy",
                            one: "mniej niż 1 sekunda",
                            other: "mniej niż %{count} sekund"
                        },
                        over_x_years: {
                            few: "ponad %{count}  lata",
                            one: "ponad 1 rok",
                            other: "ponad %{count}  lat"
                        },
                        x_days: {
                            few: "%{count} dni",
                            one: "1 dzień",
                            other: "%{count} dni"
                        },
                        x_minutes: {
                            few: "%{count} minuty",
                            one: "1 minuta",
                            other: "%{count} minut"
                        },
                        x_months: {
                            few: "%{count} miesiące",
                            one: "1 miesiąc",
                            other: "%{count} miesięcy"
                        },
                        x_seconds: {
                            few: " %{count} sekundy",
                            one: "1 sekunda",
                            other: " %{count} sekund"
                        }
                    },
                    prompts: {
                        day: "Dzień",
                        hour: "Godzina",
                        minute: "Minuta",
                        month: "Miesiąc",
                        second: "Sekundy",
                        year: "Rok"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    few: "Bajty",
                                    one: "Bajt",
                                    other: "Bajtów"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: "oraz ",
                        or: {
                            last_word_connector: "lub ",
                            two_words_connector: " lub "
                        },
                        two_words_connector: " i ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Komunikuj się z innymi uczestnikami i pytaj ich o pomoc.",
                        community_support_forums: "Forum wsparcia",
                        contact_support: "Skontaktuj się z działem pomocy",
                        contact_support_sub_text: "Zdobądź pomoc w sprawach uwarunkowanych czasowo.",
                        curriculum_assessment_errata: "Wykaz błędów programu/oceniania",
                        curriculum_assessment_errata_description: "Zobacz zgłoszone błędy oceniania i programu. Wyszukaj słowo „errata”.",
                        networking_academy_description: "Zobacz odpowiedzi Cisco na najczęściej zadawane pytania.",
                        networking_academy_faqs: "Najczęściej zadawane pytania Networking Academy"
                    },
                    select: {
                        prompt: "Wybierz"
                    }
                },
                time: {
                    am: "rano",
                    count_hours_ago: {
                        few: "%{count} godziny temu",
                        one: "1 godzina temu",
                        other: "%{count} godzin temu"
                    },
                    count_minutes_ago: {
                        few: "%{count} minuty temu",
                        one: "1 minuta temu",
                        other: "%{count} minut temu"
                    },
                    due_date: "%{date} do %{time}",
                    event: "%{date} o godzinie %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "mniej niż minutę temu",
                    pm: "po południu",
                    ranges: {
                        different_days: "%{start_date_and_time} do %{end_date_and_time}",
                        same_day: "%{date} od %{start_time} do %{end_time}",
                        times: "%{start_time} do %{end_time}"
                    },
                    unknown_date: "Nieznana data",
                    with_ago: "%{time} temu"
                }
            },
            pt: {
                date: {
                    abbr_day_names: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
                    abbr_month_names: [null, "Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
                    day_names: ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"],
                    days: {
                        today: "Hoje",
                        today_lower: "hoje",
                        tomorrow: "Amanhã",
                        yesterday: "Ontem"
                    },
                    formats: {
                        date_at_time: "%b %-d em %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %-d, %Y",
                        long_with_weekday: "%A, %B %-d",
                        medium: "%b %e, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %e",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "cerca de 1 hora",
                            other: "cerca de %{count} horas"
                        },
                        about_x_months: {
                            one: "cerca de 1 mês",
                            other: "cerca de %{count} meses"
                        },
                        about_x_years: {
                            one: "cerca de 1 ano",
                            other: "cerca de %{count} anos"
                        },
                        almost_x_years: {
                            one: "quase 1 ano",
                            other: "quase %{count} anos"
                        },
                        half_a_minute: "meio minuto",
                        less_than_x_minutes: {
                            one: "menos de um minuto",
                            other: "menos de %{count} minutos"
                        },
                        less_than_x_seconds: {
                            one: "menos de 1 segundo",
                            other: "menos de %{count} segundos"
                        },
                        over_x_years: {
                            one: "mais de 1 ano",
                            other: "mais de %{count} anos"
                        },
                        x_days: {
                            one: "1 dia",
                            other: "%{count} dias"
                        },
                        x_minutes: {
                            one: "1 minuto",
                            other: "%{count} minutos"
                        },
                        x_months: {
                            one: "1 mês",
                            other: "%{count} meses"
                        },
                        x_seconds: {
                            one: "1 segundo",
                            other: "%{count} segundos"
                        }
                    },
                    prompts: {
                        day: "Dia",
                        hour: "Hora",
                        minute: "Minuto",
                        month: "Mês",
                        second: "Segundos",
                        year: "Ano"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "Byte",
                                    other: "Bytes"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: "e ",
                        or: {
                            last_word_connector: ", ou ",
                            two_words_connector: " ou "
                        },
                        two_words_connector: " e ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Interaja com os seus pares e obtenha ajuda dos mesmos.",
                        community_support_forums: "Fóruns de suporte da comunidade",
                        contact_support: "Contactar Suporte",
                        contact_support_sub_text: "Obter ajuda relacionada com questões urgentes",
                        curriculum_assessment_errata: "Errata de programa/avaliação",
                        curriculum_assessment_errata_description: 'Veja erros de avaliação e programa já comunicados. Procure o termo "errata".',
                        networking_academy_description: "Veja as respostas da Cisco às perguntas mais frequentes.",
                        networking_academy_faqs: "Perguntas frequentes da Networking Academy"
                    },
                    select: {
                        prompt: "Selecione"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        one: "1 hora atrás",
                        other: "%{count} horas atrás"
                    },
                    count_minutes_ago: {
                        one: "1 minuto atrás",
                        other: "%{count} minutos atrás"
                    },
                    due_date: "%{date} por %{time}",
                    event: "%{date} em %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "há menos de um minuto",
                    pm: "pm",
                    ranges: {
                        different_days: "%{start_date_and_time} para %{end_date_and_time}",
                        same_day: "%{date} de %{start_time} até %{end_time}",
                        times: "%{start_time} até %{end_time}"
                    },
                    unknown_date: "Data desconhecida",
                    with_ago: "%{time} atrás"
                }
            },
            "pt-pt": {},
            "ro-ro": {},
            ru: {
                date: {
                    abbr_day_names: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
                    abbr_month_names: [null, "Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июль", "Авг", "Сен", "Окт", "Ноя", "Дек"],
                    day_names: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
                    days: {
                        today: "Сегодня",
                        today_lower: "сегодня",
                        tomorrow: "Завтра",
                        yesterday: "Вчера"
                    },
                    formats: {
                        date_at_time: "%b %-d в %l:%M%P",
                        "default": "%Y-%m-%d",
                        "long": "%B %d, %Y",
                        medium: "%b %e, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %e",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            few: "около %{count} часов",
                            one: "около 1 часа",
                            other: "около %{count} часов"
                        },
                        about_x_months: {
                            few: "около %{count} месяцев",
                            one: "около 1 месяца",
                            other: "около %{count} месяцев"
                        },
                        about_x_years: {
                            few: "около %{count} лет",
                            one: "около 1 года",
                            other: "около %{count} лет"
                        },
                        almost_x_years: {
                            few: "Почти %{count} года (лет)",
                            one: "Почти 1 год",
                            other: "Почти %{count} года (лет)"
                        },
                        half_a_minute: "30 секунд",
                        less_than_x_minutes: {
                            few: "меньше чем за %{count} минут(ы)",
                            one: "меньше чем за минуту",
                            other: "меньше чем за %{count} минут(ы)"
                        },
                        less_than_x_seconds: {
                            few: "меньше чем за %{count} секунд(ы)",
                            one: "меньше чем за 1 секунду",
                            other: "меньше чем за %{count} секунд(ы)"
                        },
                        over_x_years: {
                            few: "более %{count} лет",
                            one: "более 1 года",
                            other: "более %{count} лет"
                        },
                        x_days: {
                            few: "%{count} дня(дней)",
                            one: "1 день",
                            other: "%{count} дня(дней)"
                        },
                        x_minutes: {
                            few: "%{count} минут(ы)",
                            one: "1 минута",
                            other: "%{count} минут(ы)"
                        },
                        x_months: {
                            few: " %{count} месяца(ев)",
                            one: "1 месяц",
                            other: " %{count} месяца(ев)"
                        },
                        x_seconds: {
                            few: "%{count} секунд(ы)",
                            one: " 1 секунда",
                            other: "%{count} секунд(ы)"
                        }
                    },
                    prompts: {
                        day: "День",
                        hour: "Час",
                        minute: "Минута",
                        month: "Месяц",
                        second: "Секунды",
                        year: "Год"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    few: "Байты",
                                    one: "Байт",
                                    other: "Байты"
                                },
                                gb: "Гбайт",
                                kb: "Кбайт",
                                mb: "Мбайт",
                                tb: "ТБ"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", и ",
                        or: {
                            last_word_connector: ", или ",
                            two_words_connector: " или "
                        },
                        two_words_connector: " и ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "Взаимодействовать с коллегами и получить помощь от них.",
                        community_support_forums: "Форумы поддержки сообщества",
                        contact_support: "Связаться со службой поддержки",
                        contact_support_sub_text: "Получить помощь по срочным вопросам.",
                        curriculum_assessment_errata: "Опечатки в учебном плане/проверке знаний",
                        curriculum_assessment_errata_description: 'Просмотреть уже сообщенные ошибки проверки знаний и учебного плана. Искать "опечатка errata".',
                        networking_academy_description: "Просмотреть ответы Cisco на часто задаваемые вопросы.",
                        networking_academy_faqs: "Часто задаваемые вопросы Сетевой академии"
                    },
                    select: {
                        prompt: "Выберите"
                    }
                },
                time: {
                    am: "am",
                    count_hours_ago: {
                        few: "%{count} часа(ов) назад",
                        one: "1 час назад",
                        other: "%{count} часа(ов) назад"
                    },
                    count_minutes_ago: {
                        few: "%{count} минут(ы) назад",
                        one: "1 минута назад",
                        other: "%{count} минут(ы) назад"
                    },
                    due_date: "%{date} по %{time}",
                    event: "%{date} в %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%l:%M%P",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "меньше минуты назад",
                    pm: "pm",
                    ranges: {
                        different_days: "%{start_date_and_time}  — %{end_date_and_time}",
                        same_day: "%{date} с %{start_time} по %{end_time}",
                        times: "%{start_time}  — %{end_time}"
                    },
                    unknown_date: "Неизвестная дата",
                    with_ago: "%{time} назад"
                }
            },
            "tr-tr": {},
            zh: {
                date: {
                    abbr_day_names: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
                    abbr_month_names: [null, "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
                    day_names: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
                    days: {
                        today: "今天",
                        today_lower: "今天",
                        tomorrow: "明天",
                        yesterday: "昨天"
                    },
                    formats: {
                        date_at_time: "%b %-d 于 %H:%M",
                        "default": "%Y-%m-%d",
                        "long": "%B %-d，%Y",
                        long_with_weekday: "%A，%B %-d",
                        medium: "%b %e, %Y",
                        medium_month: "%b %Y",
                        medium_with_weekday: "%a %b %-d, %Y",
                        "short": "%b %e",
                        short_month: "%b",
                        short_weekday: "%a",
                        short_with_weekday: "%a, %b %-d",
                        weekday: "%A"
                    },
                    month_names: [null, "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
                },
                datetime: {
                    distance_in_words: {
                        about_x_hours: {
                            one: "大约 %{count} 个小时",
                            other: "大约 %{count} 个小时"
                        },
                        about_x_months: {
                            one: "大约 %{count} 个月",
                            other: "大约 %{count} 个月"
                        },
                        about_x_years: {
                            one: "大约 %{count} 年",
                            other: "大约 %{count} 年"
                        },
                        almost_x_years: {
                            one: "不到 %{count} 年",
                            other: "不到 %{count} 年"
                        },
                        half_a_minute: "半分钟",
                        less_than_x_minutes: {
                            one: "少于 %{count} 分钟",
                            other: "少于 %{count} 分钟"
                        },
                        less_than_x_seconds: {
                            one: "少于 %{count} 秒",
                            other: "少于 %{count} 秒"
                        },
                        over_x_years: {
                            one: "超过 %{count} 年",
                            other: "超过 %{count} 年"
                        },
                        x_days: {
                            one: "%{count} 天",
                            other: "%{count} 天"
                        },
                        x_minutes: {
                            one: "%{count} 分钟",
                            other: "%{count} 分钟"
                        },
                        x_months: {
                            one: "%{count} 个月",
                            other: "%{count} 个月"
                        },
                        x_seconds: {
                            one: "%{count} 秒",
                            other: "%{count} 秒"
                        }
                    },
                    prompts: {
                        day: "日",
                        hour: "小时",
                        minute: "分钟",
                        month: "月",
                        second: "秒",
                        year: "年"
                    }
                },
                number: {
                    currency: {
                        format: {
                            delimiter: ",",
                            format: "%u%n",
                            separator: ".",
                            unit: "$"
                        }
                    },
                    format: {
                        delimiter: ",",
                        separator: "."
                    },
                    human: {
                        storage_units: {
                            format: "%n %u",
                            units: {
                                "byte": {
                                    one: "字节",
                                    other: "字节"
                                },
                                gb: "GB",
                                kb: "KB",
                                mb: "MB",
                                tb: "TB"
                            }
                        }
                    }
                },
                support: {
                    array: {
                        last_word_connector: ", and ",
                        or: {
                            last_word_connector: ", or ",
                            two_words_connector: " or "
                        },
                        two_words_connector: " and ",
                        words_connector: ", "
                    },
                    help_menu: {
                        community_support_description: "与您的同伴进行交互并得到帮助。",
                        community_support_forums: "社区支持论坛",
                        contact_support: "联系支持",
                        contact_support_sub_text: "针对时间敏感的问题获得帮助。",
                        curriculum_assessment_errata: "课程/测验勘误",
                        curriculum_assessment_errata_description: "查看已经报告的测验和课程错误。搜索“勘误”。",
                        networking_academy_description: "查看 Cisco 对最常见问题的答案。",
                        networking_academy_faqs: "Networking Academy 常见问题解答"
                    },
                    select: {
                        prompt: "请选择"
                    }
                },
                time: {
                    am: "上午",
                    count_hours_ago: {
                        one: "%{count} 小时前",
                        other: "%{count} 小时前"
                    },
                    count_minutes_ago: {
                        one: "%{count} 分钟前",
                        other: "%{count} 分钟前"
                    },
                    due_date: "%{date}，%{time} 之前",
                    event: "%{date} %{time}",
                    formats: {
                        "default": "%a, %d %b %Y %H:%M:%S %z",
                        "long": "%B %d, %Y %H:%M",
                        "short": "%d %b %H:%M",
                        tiny: "%H:%M",
                        tiny_on_the_hour: "%l%P"
                    },
                    less_than_a_minute_ago: "不到一分钟前",
                    pm: "下午",
                    ranges: {
                        different_days: "%{start_date_and_time} 至 %{end_date_and_time}",
                        same_day: "%{date}，从 %{start_time} 到 %{end_time}",
                        times: "%{start_time} 至 %{end_time}"
                    },
                    unknown_date: "未知日期",
                    with_ago: "%{time} 前"
                }
            },
            "zh-hans": {}
        }
    })
}), define("jquery.keycodes", ["jquery", "jquery.instructure_date_and_time"], function (a) {
    a.fn.keycodes = function (b, c) {
        var d = {
            27: "esc",
            9: "tab",
            32: "space",
            13: "return",
            8: "backspace",
            145: "scroll",
            20: "capslock",
            144: "numlock",
            19: "pause",
            45: "insert",
            36: "home",
            46: "del",
            35: "end",
            33: "pageup",
            34: "pagedown",
            37: "left",
            38: "up",
            39: "right",
            40: "down",
            112: "f1",
            113: "f2",
            114: "f3",
            115: "f4",
            116: "f5",
            117: "f6",
            118: "f7",
            119: "f8",
            120: "f9",
            121: "f10",
            122: "f11",
            123: "f12",
            191: "/"
        };
        a.browser.mozilla && (d = a.extend(d, {
            96: "0",
            97: "1",
            98: "2",
            99: "3",
            100: "4",
            101: "5",
            102: "6",
            103: "7",
            104: "8",
            105: "9",
            0: "191"
        })), typeof b == "string" && (b = {
            keyCodes: b
        }), this.filter(":input,object,embed").length > 0 && (b.ignore = "");
        var b = a.extend({}, a.fn.keycodes.defaults, b),
            e = [],
            f = [],
            g = b.keyCodes.split(" ");
        return a.each(g, function (a, b) {
            f.push(b), b = b.split("+").sort().join("+").toLowerCase(), e.push(b)
        }), this.bind("keydown", function (g, h) {
            g = h && h.keyCode ? h : g;
            if (b.ignore && a(g.target).is(b.ignore)) return;
            var i = [];
            g.shiftKey && i.push("Shift"), g.ctrlKey && i.push("Ctrl"), g.metaKey && i.push("Meta"), g.altKey && i.push("Alt");
            var j = d[g.keyCode];
            j = j || String.fromCharCode(g.keyCode), i.push(j), i = i.sort().join("+").toLowerCase(), g.keyMatches = function (a) {
                return a = a.split("+").sort().join("+").toLowerCase(), a == i
            };
            var k = a.inArray(i, e),
                l = a(document).data("last_datepicker");
            if (l && l[0] == this && g.keyCode == 27) return g.preventDefault(), !1;
            k != -1 && (g.keyString = f[k], c.call(this, g))
        }), this
    }, a.fn.keycodes.defaults = {
        ignore: ":input,object,embed",
        keyCodes: ""
    }
}), define("jquery.instructure_date_and_time", ["i18n!instructure", "jquery", "str/htmlEscape", "jquery.keycodes", "vendor/date", "jqueryui/datepicker", "jqueryui/sortable", "jqueryui/widget"], function (a, b, c) {
    var d = function (a, c) {
            return a.data("accessible-message-timeout") && (clearTimeout(a.data("accessible-message-timeout")), a.removeData("accessible-message-timeout")), c ?
            function () {
                b("#aria_alerts").text(c), a.removeData("accessible-message-timeout")
            } : function () {}
        };
    b.parseDateTime = function (a, c) {
        var a = b.datepicker.parseDate("mm/dd/yy", a);
        if (c) {
            var d = c.split(":"),
                e = parseInt(d[0], 10);
            e == 12 && (e = 0), c.match(/pm/i) && (e += 12);
            var f = 0;
            d[1] && (f = d[1].replace(/(am|pm)/gi, "")), a.setHours(e), a.setMinutes(f)
        } else a.setHours(0), a.setMinutes(0);
        return a.date = a, a
    }, b.formatDateTime = function (a, b) {
        var c = "",
            d = "";
        a && (a.date = a.date || a), b.object_name && (c += b.object_name + "[", d = "]" + d), b.property_name && (c += b.property_name);
        var e = {};
        return a && !isNaN(a.date.getFullYear()) ? (e[c + "(1i)" + d] = a.getFullYear(), e[c + "(2i)" + d] = a.getMonth() + 1, e[c + "(3i)" + d] = a.getDate(), e[c + "(4i)" + d] = a.getHours(), e[c + "(5i)" + d] = a.getMinutes()) : (e[c + "(1i)" + d] = "", e[c + "(2i)" + d] = "", e[c + "(3i)" + d] = "", e[c + "(4i)" + d] = "", e[c + "(5i)" + d] = ""), e
    }, b.parseFromISO = function (a, c) {
        var d = parseInt(b("#time_zone_offset").text(), 10) / -60,
            e = new Date;
        c = c || "event";
        try {
            var f = {};
            if (!a) return b.parseFromISO.defaults;
            var g = a.substring(0, 4),
                h = a.substring(5, 7),
                i = a.substring(8, 10),
                j = parseInt(a.substring(19), 10) || 0;
            f.date = new Date(g, h - 1, i), f.date.getTimezoneOffset() != e.getTimezoneOffset() && (d -= (f.date.getTimezoneOffset() - e.getTimezoneOffset()) / 60);
            var k = d - j;
            f.date_sortable = a.substring(0, 10), f.date_string = h + "/" + i + "/" + g, f.date_formatted = b.dateString(f.date);
            var l = a.substring(11, 13),
                m = a.substring(14, 16),
                n = a.substring(17, 19),
                o = parseInt(l, 10) * 1e3 * 3600;
            k && !isNaN(k) && (o += k * 1e3 * 3600);
            var p = parseInt(m, 10) * 1e3 * 60,
                q = parseInt(n, 10) * 1e3,
                r = o + p + q || 0,
                s = Date.UTC(g, h - 1, i) || 0;
            f.time_timestamp = r / 1e3, f.date_timestamp = s / 1e3;
            var t = f.date.getTimezoneOffset() * 6e4,
                u = new Date(s + r + t),
                v = "am";
            o = u.getHours(), o > 12 ? (o -= 12, v = "pm") : o == 12 ? v = "pm" : o === 0 && (o = 12);
            var w = o,
                x = ":";
            u.getMinutes() < 10 && (x += "0"), x += u.getMinutes(), u.getMinutes() !== 0 && (w += x);
            var y = c == "due_date" ? "by" : "at",
                z = " " + y + " " + w + v;
            f.show_time = !0;
            var A = u.getHours();
            return A < 10 && (A = "0" + A), f.time_sortable = A + x, w += v, f.time_formatted = w, f.time_string = o + x + v, f.time = u, f.datetime = u, f.date_formatted = b.dateString(f.datetime), f.datetime_formatted = f.date_formatted + z, f.timestamp = (r + s) / 1e3, f.minute_timestamp = f.timestamp - f.timestamp % 60, f
        } catch (B) {
            return b.parseFromISO.defaults
        }
    }, b.getUserOffset = function () {
        return user_offset = parseInt(b("#time_zone_offset").text(), 10) * -1
    }, b.fudgeDateForProfileTimezone = function (a, c) {
        var d, e, f, g, h;
        return a ? (d = new Date, e = b.getUserOffset(), a.getTimezoneOffset() != d.getTimezoneOffset() && (e -= a.getTimezoneOffset() - d.getTimezoneOffset()), f = e + a.getTimezoneOffset(), f == 0 ? a : (g = a.getTime(), g += f * 60 * 1e3 * (c === !0 ? -1 : 1), h = new Date, h.setTime(g), h)) : null
    }, b.unfudgeDateForProfileTimezone = function (a) {
        return b.fudgeDateForProfileTimezone(a, !0)
    }, b.parseFromDateUTC = function (a, c) {
        return b.parseFromISO(b.dateToISO8601UTC(a), c)
    }, b.parseFromISO.ref_date = new Date, b.parseFromISO.offset = b.parseFromISO.ref_date.getTimezoneOffset() * 6e4, b.parseFromISO.defaults = {
        date: new Date(b.parseFromISO.offset),
        date_sortable: "0000-00-00",
        date_string: "",
        date_formatted: "",
        time_timestamp: 0,
        date_timestamp: 0,
        timestamp: 0,
        time: new Date(b.parseFromISO.offset),
        time_formatted: "",
        time_string: ""
    }, b.dateToISO8601UTC = function (a) {
        var b = function (a) {
                return a < 10 ? "0" + a : a
            };
        return a.getUTCFullYear() + "-" + b(a.getUTCMonth() + 1) + "-" + b(a.getUTCDate()) + "T" + b(a.getUTCHours()) + ":" + b(a.getUTCMinutes()) + ":" + b(a.getUTCSeconds()) + "Z"
    }, b.dateToISO8601 = function (a) {
        var b = function (a) {
                a < 10 ? "0" + a : a
            };
        return a.getFullYear() + "-" + b(a.getMonth() + 1) + "-" + b(a.getDate()) + "T" + b(a.getHours()) + ":" + b(a.getMinutes()) + ":" + b(a.getSeconds()) + "Z"
    };
    var e = new Date;
    b.thisYear = function (a) {
        return a && a.getFullYear() == e.getFullYear()
    }, b.dateString = function (a) {
        return a && a.toString(b.thisYear(a) ? "MMM d" : "MMM d, yyyy") || ""
    }, b.timeString = function (a) {
        return a && a.toString("h:mmtt").toLowerCase() || ""
    }, b.friendlyDatetime = function (c, d) {
        var e = Date.today();
        return Date.equals(c.clone().clearTime(), e) ? a.l("#time.formats.tiny", c) : b.friendlyDate(c, d)
    }, b.friendlyDate = function (b, c) {
        c == null && (c = "past");
        var d = Date.today(),
            e = b.clone().clearTime();
        return Date.equals(e, d) ? a.t("#date.days.today", "Today") : Date.equals(e, d.add(-1).days()) ? a.t("#date.days.yesterday", "Yesterday") : Date.equals(e, d.add(1).days()) ? a.t("#date.days.tomorrow", "Tomorrow") : c == "past" && e < d && e >= d.add(-6).days() ? a.l("#date.formats.weekday", e) : c == "future" && e < d.add(7).days() && e >= d ? a.l("#date.formats.weekday", e) : a.l("#date.formats.medium", e)
    }, b.fn.parseFromISO = b.parseFromISO, b.datepicker.oldParseDate = b.datepicker.parseDate, b.datepicker.parseDate = function (a, c, d) {
        return Date.parse((c || "").toString().replace(/ (at|by)/, "")) || b.datepicker.oldParseDate(a, c, d)
    }, b.datepicker._generateDatepickerHTML = b.datepicker._generateHTML, b.datepicker._generateHTML = function (d) {
        var e = b.datepicker._generateDatepickerHTML(d);
        if (d.settings.timePicker) {
            var f = d.input.data("time-hour") || "";
            f = f.replace(/'/g, "");
            var g = d.input.data("time-minute") || "";
            g = g.replace(/'/g, "");
            var h = d.input.data("time-ampm") || "",
                i = h == "am" ? "selected" : "",
                j = h == "pm" ? "selected" : "";
            e += "<div class='ui-datepicker-time ui-corner-bottom'><label for='ui-datepicker-time-hour'>" + c(a.beforeLabel("datepicker.time", "Time")) + "</label> <input id='ui-datepicker-time-hour' type='text' value='" + f + "' title='hr' class='ui-datepicker-time-hour' style='width: 20px;'/>:<input type='text' value='" + g + "' title='min' class='ui-datepicker-time-minute' style='width: 20px;'/> <select class='ui-datepicker-time-ampm un-bootrstrapify' title='" + c(a.t("datepicker.titles.am_pm", "am/pm")) + "'><option value=''>&nbsp;</option><option value='am' " + i + ">" + c(a.t("#time.am", "am")) + "</option><option value='pm' " + j + ">" + c(a.t("#time.pm", "pm")) + "</option></select>&nbsp;&nbsp;&nbsp;<button type='button' class='btn btn-mini ui-datepicker-ok'>" + c(a.t("#buttons.done", "Done")) + "</button></div>"
        }
        return e
    }, b.fn.realDatepicker = b.fn.datepicker;
    var f = b.datepicker._selectDay;
    b.datepicker._selectDay = function (a, c, d, e) {
        var g = b(a);
        if (b(e).hasClass(this._unselectableClass) || this._isDisabledDatepicker(g[0])) return;
        var h = this._getInst(g[0]);
        if (h.settings.timePicker && !b.datepicker.okClicked && !h._keyEvent) {
            var i = h.inline;
            h.inline = !0, b.data(g, "datepicker", h), f.call(this, a, c, d, e), h.inline = i, b.data(g, "datepicker", h)
        } else f.call(this, a, c, d, e)
    }, b.fn.datepicker = function (a) {
        return a = b.extend({}, a), a.prevOnSelect = a.onSelect, a.onSelect = function (c, d) {
            a.prevOnSelect && a.prevOnSelect.call(this, c, d);
            var e = d.dpDiv,
                f = e.find(".ui-datepicker-time-hour").val() || b(this).data("time-hour"),
                g = e.find(".ui-datepicker-time-minute").val() || b(this).data("time-minute"),
                h = e.find(".ui-datepicker-time-ampm").val() || b(this).data("time-ampm");
            if (f) {
                g = g || "00", h = h || "pm";
                var i = f + ":" + g + " " + h;
                c += " " + i
            }
            d.input.val(c).change()
        }, b.fn.datepicker.timepicker_initialized || (b(document).delegate(".ui-datepicker-ok", "click", function (a) {
            var c = b.datepicker._curInst,
                d = c,
                e = b("td." + b.datepicker._dayOverClass + ", td." + b.datepicker._currentClass, d.dpDiv);
            e[0] ? (b.datepicker.okClicked = !0, b.datepicker._selectDay(c.input[0], d.selectedMonth, d.selectedYear, e[0]), b.datepicker.okClicked = !1) : b.datepicker._hideDatepicker(null, b.datepicker._get(d, "duration"))
        }), b(document).delegate(".ui-datepicker-time-hour", "change keypress focus blur", function (a) {
            var c = b.datepicker._curInst;
            if (c) {
                var d = b(this).val();
                c.input.data("time-hour", d)
            }
        }).delegate(".ui-datepicker-time-minute", "change keypress focus blur", function (a) {
            var c = b.datepicker._curInst;
            if (c) {
                var d = b(this).val();
                c.input.data("time-minute", d)
            }
        }).delegate(".ui-datepicker-time-ampm", "change keypress focus blur", function (a) {
            var c = b.datepicker._curInst;
            if (c) {
                var d = b(this).val();
                c.input.data("time-ampm", d)
            }
        }), b(document).delegate(".ui-datepicker-time-hour,.ui-datepicker-time-minute,.ui-datepicker-time-ampm", "mousedown", function (a) {
            b(this).focus()
        }), b(document).delegate(".ui-datepicker-time-hour,.ui-datepicker-time-minute,.ui-datepicker-time-ampm", "change keypress focus blur", function (a) {
            if (a.keyCode && a.keyCode == 13) {
                var c = b.datepicker._curInst,
                    d = c,
                    e = b("td." + b.datepicker._dayOverClass + ", td." + b.datepicker._currentClass, d.dpDiv);
                e[0] ? (b.datepicker.okClicked = !0, b.datepicker._selectDay(c.input[0], d.selectedMonth, d.selectedYear, e[0]), b.datepicker.okClicked = !1) : b.datepicker._hideDatepicker(null, b.datepicker._get(d, "duration"))
            } else a.keyCode && a.keyCode == 27 && b.datepicker._hideDatepicker(null, "")
        }), b.fn.datepicker.timepicker_initialized = !0), this.realDatepicker(a), b(document).data("last_datepicker", this), this
    }, b.fn.date_field = function (a) {
        return a = b.extend({}, a), a.dateOnly = !0, this.datetime_field(a), this
    }, b.fn.time_field = function (a) {
        return a = b.extend({}, a), a.timeOnly = !0, this.datetime_field(a), this
    }, b.datepicker._triggerClass = b.datepicker._triggerClass + " btn", b.fn.datetime_field = function (c) {
        return c = b.extend({}, c), this.each(function () {
            var e = b(this),
                f = e;
            if (e.hasClass("datetime_field_enabled")) return;
            e.addClass("datetime_field_enabled");
            if (!c.timeOnly) {
                e.wrap('<div class="input-append" />'), f = e.parent(".input-append");
                var g = {
                    timePicker: !c.dateOnly,
                    constrainInput: !1,
                    dateFormat: "M d, yy",
                    showOn: "button",
                    buttonText: '<i class="icon-calendar-month"></i>',
                    buttonImageOnly: !1
                };
                e.datepicker(b.extend(g, c.datepicker))
            }
            var h = b('<div class="datetime_suggest" />').insertAfter(f);
            if (c.addHiddenInput) {
                var i = b('<input type="hidden">').insertAfter(e);
                i.attr("name", e.attr("name")), i.val(e.val()), e.removeAttr("name"), e.data("hiddenInput", i)
            }
            e.bind("change focus blur keyup", function () {
                var e = b(this),
                    f = e.val();
                c.timeOnly && f && parseInt(f, 10) == f && (f += f < 8 ? "pm" : "am");
                var g = Date.parse((f || "").toString().replace(/ (at|by)/, "")),
                    i = a.t("errors.not_a_date", "That's not a date!"),
                    j = i;
                e.val() || (j = ""), g && (e.data("date", g), e.data("hiddenInput") && e.data("hiddenInput").val(g), !c.timeOnly && !c.dateOnly && (g.getHours() || g.getMinutes() || c.alwaysShowTime) ? (j = g.toString("ddd MMM d, yyyy h:mmtt"), e.data("time-hour", g.toString("h")).data("time-minute", g.toString("mm")).data("time-ampm", g.toString("tt").toLowerCase())) : c.timeOnly ? j = g.toString("h:mmtt").toLowerCase() : j = g.toString("ddd MMM d, yyyy")), h.toggleClass("invalid_datetime", j == i).text(j), j == i ? e.data("accessible-message-timeout", setTimeout(d(e, j), 2e3)) : e.data("accessible-message-timeout") && (clearTimeout(e.data("accessible-message-timeout")), e.removeData("accessible-message-timeout"))
            }).triggerHandler("change"), e.next().attr("aria-hidden", "true"), e.next().attr("tabindex", "-1")
        }), this
    }, b.datetime = {}, b.datetime.shortFormat = "MMM d, yyyy", b.datetime.defaultFormat = "MMM d, yyyy h:mmtt", b.datetime.sortableFormat = "yyyy-MM-ddTHH:mm:ss", b.datetime.clean = function (a) {
        var c = Date.parse((a || "").toString("yyyy-MM-ddTHH:mm:ss").replace(/ (at|by)/, "")) || a,
            d = "";
        return c && (c.getHours() || c.getMinutes() ? d = c.toString(b.datetime.defaultFormat) : d = c.toString(b.datetime.shortFormat)), d
    }, b.datetime.process = function (a) {
        var c = a;
        typeof a == "string" && (c = Date.parse((a || "").toString().replace(/ (at|by)/, "")));
        var d = "";
        return c && (d = c.toString(b.datetime.sortableFormat)), d
    }, b.fn.timepicker = function () {
        var a = b("#time_picker");
        return a.length === 0 && (a = b._initializeTimepicker()), this.each(function () {
            b(this).focus(function () {
                var a = b(this).offset(),
                    c = b(this).outerHeight(),
                    d = b(this).outerWidth(),
                    e = b("#time_picker");
                e.css({
                    left: -1e3,
                    height: "auto",
                    width: "auto"
                }).show();
                var f = e.offset(),
                    g = e.outerHeight(),
                    h = e.outerWidth();
                e.css({
                    top: a.top + c,
                    left: a.left
                }).end(), b("#time_picker .time_slot").removeClass("ui-state-highlight").removeClass("ui-state-active"), e.data("attached_to", b(this)[0]);
                var i = b(window).height(),
                    j = b(window).width(),
                    k = b.windowScrollTop();
                a.top + c - k + g > i && e.css({
                    top: a.top - g
                }), a.left + h > j && e.css({
                    left: a.left + d - h
                }), b("#time_picker").hide().slideDown()
            }).blur(function () {
                b("#time_picker").data("attached_to") == b(this)[0] && (b("#time_picker").data("attached_to", null), b("#time_picker").hide().find(".time_slot.ui-state-highlight").removeClass("ui-state-highlight"))
            }).keycodes("esc return", function (a) {
                b(this).triggerHandler("blur")
            }).keycodes("ctrl+up ctrl+right ctrl+left ctrl+down", function (a) {
                if (b("#time_picker").data("attached_to") != b(this)[0]) return;
                a.preventDefault();
                var c = b("#time_picker .time_slot.ui-state-highlight:first"),
                    d = b(b("#time_picker").data("attached_to")).val(),
                    e = 12,
                    f = "00",
                    g = "pm",
                    h;
                d && d.length >= 7 && (e = d.substring(0, 2), f = d.substring(3, 5), g = d.substring(5, 7));
                if (c.length === 0) {
                    h = parseInt(d, 10) - 1, isNaN(h) && (h = 0), b("#time_picker .time_slot").eq(h).triggerHandler("mouseover");
                    return
                }
                if (a.keyString == "ctrl+up") {
                    var i = c.parent(".widget_group");
                    h = i.children(".time_slot").index(c), i.hasClass("ampm_group") ? h = f / 15 : i.hasClass("minute_group") && (h = parseInt(e, 10) - 1), i.prev(".widget_group").find(".time_slot").eq(h).triggerHandler("mouseover")
                } else if (a.keyString == "ctrl+right") c.next(".time_slot").triggerHandler("mouseover");
                else if (a.keyString == "ctrl+left") c.prev(".time_slot").triggerHandler("mouseover");
                else if (a.keyString == "ctrl+down") {
                    i = c.parent(".widget_group"), h = i.children(".time_slot").index(c);
                    var j = i.next(".widget_group").find(".time_slot");
                    h = Math.min(h, j.length - 1), i.hasClass("hour_group") ? h = f / 15 : i.hasClass("minute_group") && (h = g == "am" ? 0 : 1), j.eq(h).triggerHandler("mouseover")
                }
            })
        }), this
    }, b._initializeTimepicker = function () {
        var d = b(document.createElement("div"));
        d.attr("id", "time_picker").css({
            position: "absolute",
            display: "none"
        });
        var e = "<div class='widget_group hour_group'>";
        return e += "<div class='ui-widget ui-state-default time_slot'>01</div>", e += "<div class='ui-widget ui-state-default time_slot'>02</div>", e += "<div class='ui-widget ui-state-default time_slot'>03</div>", e += "<div class='ui-widget ui-state-default time_slot'>04</div>", e += "<div class='ui-widget ui-state-default time_slot'>05</div>", e += "<div class='ui-widget ui-state-default time_slot'>06</div>", e += "<div class='ui-widget ui-state-default time_slot'>07</div>", e += "<div class='ui-widget ui-state-default time_slot'>08</div>", e += "<div class='ui-widget ui-state-default time_slot'>09</div>", e += "<div class='ui-widget ui-state-default time_slot'>10</div>", e += "<div class='ui-widget ui-state-default time_slot'>11</div>", e += "<div class='ui-widget ui-state-default time_slot'>12</div>", e += "<div class='clear'></div>", e += "</div>", e += "<div class='widget_group minute_group'>", e += "<div class='ui-widget ui-state-default time_slot'>00</div>", e += "<div class='ui-widget ui-state-default time_slot'>15</div>", e += "<div class='ui-widget ui-state-default time_slot'>30</div>", e += "<div class='ui-widget ui-state-default time_slot'>45</div>", e += "<div class='clear'></div>", e += "</div>", e += "<div class='widget_group ampm_group'>", e += "<div class='ui-widget ui-state-default time_slot'>" + c(a.t("#time.am", "am")) + "</div>", e += "<div class='ui-widget ui-state-default time_slot'>" + c(a.t("#time.pm", "pm")) + "</div>", e += "<div class='clear'></div>", e += "</div>", d.html(e), b("body").append(d), d.find(".time_slot").mouseover(function () {
            d.find(".time_slot.ui-state-highlight").removeClass("ui-state-highlight"), b(this).addClass("ui-state-highlight");
            var a = b(d.data("attached_to") || "none"),
                c = a.val(),
                e = 12,
                f = "00",
                g = "pm";
            c && c.length >= 7 && (e = c.substring(0, 2), f = c.substring(3, 5), g = c.substring(5, 7));
            var h = b(this).text();
            h > 0 && h <= 12 ? e = h : h == "am" || h == "pm" ? g = h : f = h, a.val(e + ":" + f + g)
        }).mouseout(function () {
            b(this).removeClass("ui-state-highlight")
        }).mousedown(function (a) {
            a.preventDefault(), b(this).triggerHandler("mouseover"), b(this).removeClass("ui-state-highlight").addClass("ui-state-active")
        }).mouseup(function () {
            b(this).removeClass("ui-state-active")
        }).click(function (a) {
            a.preventDefault(), b(this).triggerHandler("mouseover"), d.data("attached_to") && b(d.data("attached_to")).focus(), d.stop().hide().data("attached_to", null)
        }), d
    }
}), define("jquery.instructure_forms", ["INST", "i18n!instructure", "jquery", "underscore", "compiled/xhr/FakeXHR", "jquery.ajaxJSON", "jquery.disableWhileLoading", "jquery.google-analytics", "jquery.instructure_date_and_time", "jquery.instructure_misc_helpers", "jquery.instructure_misc_plugins", "compiled/jquery.rails_flash_notifications", "tinymce.editor_box", "vendor/jquery.scrollTo"], function (a, b, c, d, e) {
    c.fn.formSubmit = function (b) {
        return c(this).markRequired(b), this.submit(function (f) {
            var g = c(this),
                h = b.onSubmit;
            if (g.data("submitting")) return;
            g.data("trigger_event", f), g.hideErrors();
            var i = !1,
                j = g.validateForm(b);
            if (!j) return !1;
            var k = g.getFormData(b);
            if (b.processData && c.isFunction(b.processData)) {
                var l = null;
                try {
                    l = b.processData.call(g, k)
                } catch (m) {
                    i = m
                }
                if (l === !1) return !1;
                l && (k = l)
            }
            var n = g.data("method") || g.find("input[name='_method']").val() || g.attr("method"),
                o = g.attr("id"),
                p = g.attr("action"),
                q = null;
            if (c.isFunction(b.beforeSubmit)) {
                q = null;
                try {
                    q = b.beforeSubmit.call(g, k)
                } catch (m) {
                    i = m
                }
                if (q === !1) return !1
            }
            if (b.disableWhileLoading) {
                var r = h;
                h = function (a) {
                    if (b.disableWhileLoading === "spin_on_success") {
                        var d = a;
                        a = c.Deferred(), d.fail(function () {
                            a.reject()
                        })
                    }
                    g.disableWhileLoading(a), r && r.apply(this, arguments)
                }
            }
            if (h) {
                var s = c.Deferred(),
                    t = {};
                h(s, k), c.each(["success", "error"], function (a, d) {
                    t[d] = b[d], b[d] = function () {
                        s[d === "success" ? "resolve" : "reject"].apply(s, arguments);
                        if (c.isFunction(t[d])) return t[d].apply(this, arguments)
                    }
                })
            }
            var u = b.fileUpload;
            if (c.isFunction(b.fileUpload)) try {
                u = b.fileUpload.call(g, k)
            } catch (m) {
                i = m
            }
            u && b.fileUploadOptions && c.extend(b, b.fileUploadOptions), g.attr("action") && (p = g.attr("action"));
            if (i && !b.preventDegradeToFormSubmit) {
                s && s.reject(), a && a.environment == "development" && c.flashError("formSubmit error, trying to gracefully degrade. See console for details");
                return
            }
            f.preventDefault(), f.stopPropagation();
            var v = function (a, d) {
                    c.isFunction(b.success) && b.success.call(g, a, q, d)
                },
                w = function (a, d) {
                    var e = g,
                        f = !0;
                    if (c.isFunction(b.error)) {
                        var h = b.error.call(g, a.errors || a, q, d);
                        h && (e = h), f = !1
                    }
                    e.parents("html").get(0) == c("html").get(0) && b.formErrors !== !1 ? (c.isFunction(b.errorFormatter) && (a = b.errorFormatter(a.errors || a)), e.formErrors(a, b)) : f && c.ajaxJSON.unhandledXHRs.push(d)
                };
            if (b.noSubmit) v.call(this, k, {});
            else if (u && b.preparedFileUpload && b.context_code) c.ajaxJSONPreparedFiles.call(this, {
                handle_files: b.upload_only ? v : b.handle_files,
                single_file: b.singleFile,
                context_code: c.isFunction(b.context_code) ? b.context_code.call(g) : b.context_code,
                asset_string: b.asset_string,
                intent: b.intent,
                folder_id: c.isFunction(b.folder_id) ? b.folder_id.call(g) : b.folder_id,
                file_elements: g.find("input[type='file']:visible"),
                files: c.isFunction(b.files) ? b.files.call(g) : b.files,
                url: b.upload_only ? null : p,
                method: b.method,
                uploadDataUrl: b.uploadDataUrl,
                formData: k,
                formDataTarget: b.formDataTarget,
                success: v,
                error: w
            });
            else if (u && c.handlesHTML5Files && g.hasClass("handlingHTML5Files")) {
                var x = c.extend({}, k);
                g.find("input[type='file']").each(function () {
                    var a = c(this),
                        b = a.data("file_list");
                    b && b instanceof FileList && (x[a.attr("name")] = b)
                }), c.toMultipartForm(x, function (a) {
                    c.sendFormAsBinary({
                        url: p,
                        body: a.body,
                        content_type: a.content_type,
                        form_data: a.form_data,
                        method: n,
                        success: v,
                        error: w
                    })
                })
            } else if (u) {
                var y = d.uniqueId(o + "_"),
                    z = c("<div style='display: none;' id='box_" + y + "'><iframe id='frame_" + y + "' name='frame_" + y + "' src='about:blank' onload='$(\"#frame_" + y + '").triggerHandler("form_response_loaded");\'></iframe>').appendTo("body").find("#frame_" + y),
                    A = n,
                    B = g.attr("target"),
                    C = g.attr("ENCTYPE"),
                    D = new e;
                g.attr({
                    method: n,
                    action: p,
                    ENCTYPE: "multipart/form-data",
                    encoding: "multipart/form-data",
                    target: "frame_" + y
                }), b.onlyGivenParameters && (g.find("input[name='_method']").remove(), g.find("input[name='authenticity_token']").remove()), c.ajaxJSON.storeRequest(D, p, n, k), z.bind("form_response_loaded", function () {
                    var a = z[0],
                        b = a.contentDocument || a.contentWindow.document;
                    if (b.location.href == "about:blank") return;
                    D.setResponse(c(b).text()), c.httpSuccess(D) ? v.call(this, D.response, D) : (w.call(this, D.response, D), c.fn.defaultAjaxError.func.call(c.fn.defaultAjaxError.object, null, D, "0", null)), setTimeout(function () {
                        g.attr({
                            ENCTYPE: C,
                            encoding: C,
                            target: B
                        }), c("#box_" + y).remove()
                    }, 5e3)
                }), g.data("submitting", !0).submit().data("submitting", !1)
            } else c.ajaxJSON(p, n, k, v, w)
        }), this
    }, c.ajaxJSONPreparedFiles = function (a) {
        var b = [],
            d = this,
            e = a.files || a.file_elements || [];
        for (var f = 0; f < e.length; f++) {
            var g = e[f];
            g.name = (g.value || g.name).split(/(\/|\\)/).pop(), b.push(g)
        }
        var h = [],
            i = function () {
                var b = a.formDataTarget == "url" ? a.formData : {};
                if (a.handle_files) {
                    var d = h;
                    a.single_file && (d = h[0]), b = a.handle_files.call(this, d, b)
                }
                a.url && a.success && b !== !1 && c.ajaxJSON(a.url, a.method, b, a.success, a.error)
            },
            j = function (b, e) {
                c.ajaxJSON(a.uploadDataUrl || "/files/pending", "POST", b, function (b) {
                    try {
                        if (b && b.upload_url) {
                            var f = b.upload_params,
                                g = c(e).attr("name");
                            c(e).attr("name", b.file_param), c.ajaxJSONFiles(b.upload_url, "POST", f, c(e), function (a) {
                                h.push(a), c(e).attr("name", g), k.call(d)
                            }, function (b) {
                                c(e).attr("name", g), (a.upload_error || a.error).call(d, b)
                            }, {
                                onlyGivenParameters: !0
                            })
                        } else(a.upload_error || a.error).call(d, b)
                    } finally {}
                }, function () {
                    return (a.upload_error || a.error).apply(this, arguments)
                })
            },
            k = function () {
                var e = b.shift();
                e ? j.call(d, c.extend({
                    name: e.name,
                    on_duplicate: "rename",
                    "attachment[folder_id]": a.folder_id,
                    "attachment[intent]": a.intent,
                    "attachment[asset_string]": a.asset_string,
                    "attachment[filename]": e.name,
                    "attachment[context_code]": a.context_code
                }, a.formDataTarget == "uploadDataUrl" ? a.formData : {}), e) : i.call(d)
            };
        k.call(d)
    }, c.ajaxJSONFiles = function (a, b, d, e, f, g, h) {
        var i = c(document.createElement("form"));
        i.attr("action", a).attr("method", b), d.authenticity_token || (d.authenticity_token = ENV.AUTHENTICITY_TOKEN);
        var j = {};
        e.each(function () {
            j[c(this).attr("name")] = !0
        });
        for (var k in d) if (!j[k]) {
            var l = c(document.createElement("input"));
            l.attr("type", "hidden").attr("name", k).attr("value", d[k]), i.append(l)
        }
        e.each(function () {
            var a = c(this).clone(!0);
            c(this).after(a), i.append(c(this)), c(this).removeAttr("id")
        }), c("body").append(i.hide()), i.formSubmit({
            fileUpload: !0,
            success: f,
            onlyGivenParameters: h ? h.onlyGivenParameters : !1,
            error: g
        }), i.submit()
    }, c.handlesHTML5Files = !! (window.File && window.FileReader && window.FileList && XMLHttpRequest), c.handlesHTML5Files && c("input[type='file']").live("change", function (a) {
        var b = this.files;
        b && (c(this).data("file_list", b), c(this).parents("form").addClass("handlingHTML5Files"))
    }), c.ajaxFileUpload = function (a) {
        a.data.authenticity_token || (a.data.authenticity_token = ENV.AUTHENTICITY_TOKEN), c.toMultipartForm(a.data, function (b) {
            c.sendFormAsBinary({
                url: a.url,
                body: b.body,
                content_type: b.content_type,
                form_data: b.form_data,
                method: a.method,
                success: function (b) {
                    a.success && c.isFunction(a.success) && a.success.call(this, b)
                },
                progress: function (b) {
                    a.progress && c.isFunction(a.progress) && a.progress.call(this, b)
                },
                error: function (b, d) {
                    if (a.error && c.isFunction(a.error)) {
                        b = b || {};
                        var e = a.error.call(this, b.errors || b)
                    } else c.ajaxJSON.unhandledXHRs.push(d)
                }
            }, a.binary === !1)
        })
    }, c.httpSuccess = function (a) {
        try {
            return !a.status && location.protocol == "file:" || a.status >= 200 && a.status < 300 || a.status == 304 || jQuery.browser.safari && a.status == undefined
        } catch (b) {}
        return !1
    }, c.sendFormAsBinary = function (a, b) {
        var d = a.body,
            e = a.url,
            f = a.method,
            g = new XMLHttpRequest;
        g.upload && (g.upload.addEventListener("progress", function (b) {
            a.progress && c.isFunction(a.progress) && a.progress.call(this, b)
        }, !1), g.upload.addEventListener("error", function (b) {
            a.error && c.isFunction(a.error) && a.error.call(this, "uploading error", g, b)
        }, !1), g.upload.addEventListener("abort", function (b) {
            a.error && c.isFunction(a.error) && a.error.call(this, "aborted by the user", g, b)
        }, !1)), g.onreadystatechange = function (b) {
            if (g.readyState == 4) {
                var d = null;
                try {
                    d = c.parseJSON(g.responseText)
                } catch (e) {}
                c.httpSuccess(g) ? d && !d.errors ? a.success && c.isFunction(a.success) && a.success.call(this, d, g, b) : a.error && c.isFunction(a.error) && a.error.call(this, d || g.responseText, g, b) : a.error && c.isFunction(a.error) && a.error.call(this, d || g.responseText, g, b)
            }
        }, g.open(f, e), g.setRequestHeader("Accept", "application/json, text/javascript, */*"), g.setRequestHeader("X-Requested-With", "XMLHttpRequest"), a.form_data ? g.send(a.form_data) : (g.overrideMimeType(a.content_type || "multipart/form-data"), g.setRequestHeader("Content-Type", a.content_type || "multipart/form-data"), g.setRequestHeader("Content-Length", d.length), b ? g.send(d) : g.sendAsBinary ? g.sendAsBinary(d) : console.log("xhr.sendAsBinary not supported"))
    }, c.fileData = function (a) {
        return {
            name: a.name || a.fileName,
            size: a.size || a.fileSize,
            type: a.type,
            forced_type: a.type || "application/octet-stream"
        }
    }, c.toMultipartForm = function (a, b) {
        function n(a) {
            return a.replace(/\"/g, "")
        }
        function o() {
            f.body = g.substring(0, g.length - 2) + "--", b(f)
        }
        function p() {
            if (h.length === 0) {
                o();
                return
            }
            var a = h.shift(),
                b = a[0],
                f = a[1];
            window.FileList && f instanceof FileList && (f = f[0]);
            if (window.FileList && f instanceof FileList) {
                var i = "-----BbC04y" + d.uniqueId(),
                    j = [];
                g += 'Content-Disposition: form-data; name="' + n(b) + "\r\n" + "Content-Type: multipart/mixed; boundary=" + i + "\r\n\r\n";
                for (var k in f) j.push(f);

                function l() {
                    g += "--" + i + "--\r\n" + "--" + e + "\r\n", p()
                }
                function m() {
                    if (j.length === 0) {
                        l();
                        return
                    }
                    var a = j.shift(),
                        b = c.fileData(a),
                        d = new FileReader;
                    d.onloadend = function () {
                        g += "--" + i + "\r\n" + 'Content-Disposition: file; filename="' + n(b.name) + '"\r\n' + "Content-Type: " + b.forced_type + "\r\n" + "Content-Transfer-Encoding: binary\r\n" + "\r\n" + d.result, m()
                    }, d.readAsBinaryString(a)
                }
                m()
            } else if (window.File && f instanceof File) {
                var q = c.fileData(f),
                    r = new FileReader;
                r.onloadend = function () {
                    g += 'Content-Disposition: file; name="' + n(b) + '"; filename="' + q.name + '"\r\n' + "Content-Type: " + q.forced_type + "\r\n" + "Content-Transfer-Encoding: binary\r\n" + "\r\n" + r.result + "\r\n--" + e + "\r\n", p()
                }, r.readAsBinaryString(f)
            } else f && f.fake_file ? (g += 'Content-Disposition: file; name="' + n(b) + '"; filename="' + f.name + '"\r\n' + "Content-Type: " + f.content_type + "\r\n" + "Content-Transfer-Encoding: binary\r\n" + "\r\n" + f.content + "\r\n--" + e + "\r\n", p()) : (g += 'Content-Disposition: form-data; name="' + n(b) + '"\r\n' + "\r\n" + (f || "").toString() + "\r\n" + "--" + e + "\r\n", p())
        }
        var e = "-----AaB03x" + d.uniqueId(),
            f = {
                content_type: "multipart/form-data; boundary=" + e
            },
            g = "--" + e + "\r\n",
            h = [],
            i = !1;
        for (var j in a) h.push([j, a[j]]), a[j] && a[j].fake_file && (i = !0);
        if (window.FormData && !i) {
            var k = new FormData;
            for (var j in a) {
                var l = a[j];
                window.FileList && l instanceof FileList && (l = l[0]);
                if (l instanceof Array) for (var m = 0; m < l.length; m++) k.append(j, l[m]);
                else k.append(j, l)
            }
            f.form_data = k, b(f);
            return
        }
        p()
    }, c.fn.fillFormData = function (a, b) {
        if (this.length) {
            a = a || [];
            var d = c.extend({}, c.fn.fillFormData.defaults, b);
            d.object_name && (a = c._addObjectName(a, d.object_name, !0)), this.find(":input").each(function () {
                var b = c(this),
                    e = b.attr("name"),
                    f = b.attr("type");
                if (e in a && e) {
                    if (f != "hidden" || b.next("input:checkbox").attr("name") != e) if (f != "checkbox" && f != "radio") {
                        var g = a[e];
                        if (typeof g == "undefined" || g === null) g = "";
                        b.val(g.toString())
                    } else b.val() == a[e] ? b.attr("checked", !0) : b.attr("checked", !1);
                    b && b.change && d.call_change && b.change()
                }
            })
        }
        return this
    }, c.fn.fillFormData.defaults = {
        object_name: null,
        call_change: !0
    }, c.fn.getFormData = function (a) {
        var a = c.extend({}, c.fn.getFormData.defaults, a),
            b = {},
            d = this;
        return d.find(":input").not(":button").each(function () {
            var e = c(this),
                f = e.attr("type");
            if ((f == "radio" || f == "checkbox") && !e.attr("checked")) return;
            var g = e.val();
            if (e.hasClass("datetime_field_enabled")) {
                var h = e.parent().children(".datetime_suggest").text();
                h && (g = h)
            }
            try {
                e.data("rich_text") && (g = e.editorBox("get_code", !1))
            } catch (i) {}
            var j = e.prop("name") || "",
                k = j.match(/\[\]$/);
            if (f == "hidden" && !k && d.find("[name='" + j + "']").filter("textarea,:radio:checked,:checkbox:checked,:text,:password,select,:hidden")[0] != e[0]) return;
            j && j !== "" && (f == "checkbox" || typeof b[j] == "undefined" || k) && (!a.values || c.inArray(j, a.values) != -1) && (k ? (b[j] = b[j] || [], b[j].push(g)) : b[j] = g);
            var l = j
        }), a.object_name && (b = c._stripObjectName(b, a.object_name, !0)), b
    }, c.fn.getFormData.defaults = {
        object_name: null
    }, c._addObjectName = function (a, b, c) {
        if (!a) return a;
        var d = {};
        a instanceof Array && (d = []);
        var e, f, g;
        for (var h in a) a instanceof Array ? e = a[h] : e = h, g = e.indexOf("["), g >= 0 ? f = b + "[" + e.substring(0, g) + "]" + e.substring(g) : f = b + "[" + e + "]", typeof e == "string" && e.indexOf("=") === 0 && (f = e.substring(1), e = f), a instanceof Array ? (d.push(f), c && d.push(e)) : (d[f] = a[h], c && (d[e] = a[h]));
        return d
    }, c._stripObjectName = function (a, b, c) {
        var d = {},
            e;
        a instanceof Array && (d = []);
        for (var f in a) {
            var g, h;
            a instanceof Array ? g = a[f] : g = f;
            if (h = g.indexOf(b + "[") === 0) e = g.replace(b + "[", ""), closing = e.indexOf("]"), e = e.substring(0, closing) + e.substring(closing + 1), a instanceof Array ? d.push(e) : d[e] = a[f];
            if (!h || c) a instanceof Array ? d.push(a[f]) : d[f] = a[f]
        }
        return d
    }, c.fn.validateForm = function (a) {
        if (this.length === 0) return !1;
        var a = c.extend({}, c.fn.validateForm.defaults, a),
            e = this,
            f = {},
            g = a.data || e.getFormData(a);
        a.object_name && (a.required = c._addObjectName(a.required, a.object_name), a.date_fields = c._addObjectName(a.date_fields, a.object_name), a.dates = c._addObjectName(a.dates, a.object_name), a.times = c._addObjectName(a.times, a.object_name), a.numbers = c._addObjectName(a.numbers, a.object_name), a.property_validations = c._addObjectName(a.property_validations, a.object_name));
        if (a.required) {
            var h = d.result(a, "required");
            c.each(h, function (a, c) {
                if (!g[c]) {
                    f[c] || (f[c] = []);
                    var d = e.getFieldLabelString(c);
                    f[c].push(b.t("errors.required", "Required field") + (d ? ": " + d : ""))
                }
            })
        }
        a.date_fields && c.each(a.date_fields, function (a, c) {
            var d = e.find("input[name='" + c + "']").filter(".datetime_field_enabled");
            d.length && d.parent().children(".datetime_suggest").hasClass("invalid_datetime") && (f[c] || (f[c] = []), f[c].push(b.t("errors.invalid_datetime", "Invalid date/time value")))
        }), a.numbers && c.each(a.numbers, function (a, c) {
            var d = parseFloat(g[c]);
            isNaN(d) && (f[c] || (f[c] = []), f[c].push(b.t("errors.invalid_number", "This should be a number.")))
        }), a.property_validations && c.each(a.property_validations, function (a, d) {
            if (c.isFunction(d)) {
                var h = d.call(e, g[a], g);
                h && (typeof h != "string" && (h = b.t("errors.invalid_entry_for_field", "Invalid entry: %{field}", {
                    field: a
                })), f[a] || (f[a] = []), f[a].push(h))
            }
        });
        var i = !1;
        for (var j in f) {
            i = !0;
            break
        }
        return i ? (e.formErrors(f, a), c.trackEvent("Form Errors", this.attr("id") || this.attr("class") || document.title, JSON.stringify(f)), !1) : !0
    }, c.fn.validateForm.defaults = {
        object_name: null,
        required: null,
        dates: null,
        times: null
    }, c.fn.formErrors = function (a, b) {
        if (this.length === 0) return;
        var d = this,
            e = {},
            f = [];
        a && a.errors && (a = a.errors), typeof a == "string" && (a = {
            base: a
        }), c.each(a, function (a, b) {
            if (typeof b == "string") {
                var g = [];
                g.push(b), b = g
            } else {
                if (typeof a == "number" && b.length == 2 && b[0] instanceof jQuery && typeof b[1] == "string") {
                    f.push(b);
                    return
                }
                if (typeof a == "number" && b.length == 2 && typeof b[1] == "string") g = [], g.push(b[1]), a = b[0], b = g;
                else try {
                    g = [];
                    for (var h in b) typeof b[h] == "object" && b[h].message ? g.push(b[h].message.toString()) : g.push(b[h].toString());
                    b = g
                } catch (i) {
                    b = b.toString()
                }
            }
            d.find(":input[name='" + a + "'],:input[name*='[" + a + "]']").length > 0 ? c.each(b, function (b, c) {
                e[a] ? e[a] += "<br/>" + c : e[a] = c
            }) : c.each(b, function (a, b) {
                e.general ? e.general += "<br/>" + b : e.general = b
            })
        });
        var g = !1,
            h = 0,
            i = null,
            j = c(document).scrollTop(),
            k = {};
        c("#aria_alerts").empty(), c.each(e, function (a, b) {
            var c = d.find(":input[name='" + a + "'],:input[name*='[" + a + "]']").filter(":visible").first();
            if (!c || c.length === 0 || a == "general") c = d;
            c[0].tagName == "TEXTAREA" && c.next(".mceEditor").length && (c = c.next().find(".mceIframeContainer")), k[a] = {
                object: c,
                message: b
            }, g = !0;
            var e = c.errorBox(b).offset();
            e.top > h && (h = e.top), i = c
        }), i && i.focus();
        for (var l = 0, m = f.length; l < m; l++) {
            var n = f[l][0],
                o = f[l][1];
            g = !0;
            var p = n.errorBox(o).offset();
            p.top > h && (h = p.top)
        }
        return g && (b && b.onFormError && b.onFormError.call(d, k), c("html,body").scrollTo({
            top: h,
            left: 0
        })), this
    }, c.fn.errorBox = function (a, b) {
        if (this.length) {
            var d = this,
                e = d.data("associated_error_box");
            e && e.remove();
            var f = c("#error_box_template");
            f.length || (f = c("<div id='error_box_template' class='error_box errorBox' style=''><div class='error_text' style=''></div><img src='/images/error_bottom.png' class='error_bottom'/></div>").appendTo("body")), c("#aria_alerts").length === 0 ? f.find(".error_text").attr("role", "alert") : c("#aria_alerts").append(c("<div/>").html(a));
            var g = f.clone(!0).attr("id", "").css("zIndex", d.zIndex() + 1).appendTo("body");
            g.find(".error_text").html(a);
            var h = d.offset(),
                i = g.outerHeight(),
                j = Math.round(d.outerWidth() / 5);
            d[0].tagName == "FORM" && (j = Math.min(j, 50)), g.hide().css({
                top: h.top - i + 2,
                left: h.left + j
            }).fadeIn("fast");
            var k = function () {
                    g.remove(), d.removeData("associated_error_box"), d.removeData("associated_error_object")
                },
                l = function () {
                    g.stop(!0, !0).fadeOut("slow", k)
                };
            return d.data({
                associated_error_box: g,
                associated_error_object: d
            }).click(l).keypress(l), g.click(function () {
                c(this).fadeOut("fast", k)
            }), c.fn.errorBox.errorBoxes.push(d), c.fn.errorBox.isBeingAdjusted || c.moveErrorBoxes(), b && c("html,body").scrollTo(g), g
        }
    }, c.fn.errorBox.errorBoxes = [], c.moveErrorBoxes = function () {
        var a = [],
            b = c.fn.errorBox.errorBoxes;
        for (var d in b) {
            var e = b[d],
                f = e.data("associated_error_box");
            if (f && f.length && f[0].parentNode) {
                a.push(e);
                if (e.filter(":visible").length) {
                    var g = e.offset(),
                        h = f.outerHeight(),
                        i = Math.round(e.outerWidth() / 5);
                    e[0].tagName == "FORM" && (i = Math.min(i, 50)), f.css({
                        top: g.top - h + 2,
                        left: g.left + i
                    }).show()
                } else f.hide()
            }
        }
        c.fn.errorBox.errorBoxes = a, a.length ? c.fn.errorBox.isBeingAdjusted = setTimeout(c.moveErrorBoxes, 500) : delete c.fn.errorBox.isBeingAdjusted
    }, c.fn.hideErrors = function (a) {
        if (this.length) {
            var b = this.data("associated_error_box");
            b && (b.remove(), this.data("associated_error_box", null)), this.find(":input").each(function () {
                var a = c(this),
                    b = a.data("associated_error_box");
                b && (b.remove(), a.data("associated_error_box", null))
            })
        }
        return this
    }, c.fn.markRequired = function (a) {
        if (!a.required) return;
        var d = a.required;
        a.object_name && (d = c._addObjectName(d, a.object_name)), $form = c(this), c.each(d, function (a, d) {
            var e = $form.find('[name="' + d + '"]');
            if (!e.length) return;
            e.attr({
                "aria-required": "true"
            }), e.each(function () {
                if (!this.id) return;
                label = c('label[for="' + this.id + '"]');
                if (!label.length) return;
                label.append(c("<span />").text("*").attr("title", b.t("errors.field_is_required", "This field is required")))
            })
        })
    }, c.fn.getFieldLabelString = function (a) {
        var b = c(this).find('[name="' + a + '"]');
        if (!b.length || !b[0].id) return;
        label = c('label[for="' + b[0].id + '"]');
        if (!label.length) return;
        return label[0].firstChild.textContent
    }
}), define("jquery.instructure_misc_helpers", ["INST", "i18n!instructure", "jquery", "underscore", "str/htmlEscape", "compiled/str/TextHelper", "jquery.ajaxJSON", "jquery.instructure_forms", "jqueryui/dialog", "vendor/jquery.scrollTo"], function (a, b, c, d, e, f) {
    c.detect = function (a, b) {
        var d;
        return c.each(a, function (c, e) {
            if (b.call(e, e, c, a)) return d = e, !1
        }), d
    }, c.encodeToHex = function (a) {
        var b = "",
            c = a.length,
            d = 0,
            e;
        for (var f = 0; f < a.length; f++) {
            part = a.charCodeAt(f).toString(16);
            while (part.length < 2) part = "0" + part;
            b += part
        }
        return b
    }, c.decodeFromHex = function (a) {
        var b = "",
            c = 0;
        while (c < a.length) b += unescape("%" + a.substring(c, c + 2)), c += 2;
        return b
    }, c.raw = function (a) {
        return a = new String(a), a.htmlSafe = !0, a
    }, c.replaceOneTag = function (a, b, c) {
        if (!a) return a;
        b = (b || "").toString(), c = (c || "").toString().replace(/\s/g, "+");
        var d = new RegExp("(%7B|{){2}[\\s|%20|+]*" + b + "[\\s|%20|+]*(%7D|}){2}", "g");
        return a.replace(d, c)
    }, c.replaceTags = function (a, b, d) {
        if (typeof b == "object") {
            for (var e in b) a = c.replaceOneTag(a, e, b[e]);
            return a
        }
        return c.replaceOneTag(a, b, d)
    };
    var g = !1;
    c.scrollSidebar = function () {
        if (!g) {
            var a = c("#right-side"),
                b = c("#main"),
                e = c("#not_right_side"),
                f = c(window),
                h = c("#right-side-wrapper"),
                i = a.offset().top,
                j = h.height() - a.outerHeight(),
                k = a.offset().top - h.offset().top;

            function l() {
                var c = f.scrollTop(),
                    d = c > i - k;
                if (d) var g = e.height(),
                    l = a.height(),
                    m = g > l,
                    n = i + b.height() - c <= l + j;
                (d && m && !n) ^ h.hasClass("with-scrolling-right-side") && h.toggleClass("with-scrolling-right-side"), (d && m && n) ^ h.hasClass("with-sidebar-pinned-to-bottom") && h.toggleClass("with-sidebar-pinned-to-bottom")
            }
            var m = d.throttle(l, 50);
            m(), f.scroll(m), g = !0
        }
    }, c.underscore = function (a) {
        return (a || "").replace(/([A-Z])/g, "_$1").replace(/^_/, "").toLowerCase()
    }, c.titleize = function (a) {
        var b = (a || "").replace(/([A-Z])/g, " $1").replace(/_/g, " ").replace(/\s+/, " ").replace(/^\s/, "");
        return c.map(b.split(/\s/), function (a) {
            return (a[0] || "").toUpperCase() + a.substring(1)
        }).join(" ")
    }, c.parseUserAgentString = function (a) {
        a = (a || "").toLowerCase();
        var c = {
            version: (a.match(/.+(?:me|ox|it|ra|ie|er)[\/: ]([\d.]+)/) || [0, null])[1],
            chrome: /chrome/.test(a),
            safari: /webkit/.test(a),
            opera: /opera/.test(a),
            msie: /msie/.test(a) && !/opera/.test(a),
            firefox: /firefox/.test(a),
            mozilla: /mozilla/.test(a) && !/(compatible|webkit)/.test(a),
            speedgrader: /speedgrader/.test(a)
        },
            d = null;
        return c.chrome ? d = "Chrome" : c.safari ? d = "Safari" : c.opera ? d = "Opera" : c.msie ? d = "Internet Explorer" : c.firefox ? d = "Firefox" : c.mozilla ? d = "Mozilla" : c.speedgrader && (d = "SpeedGrader for iPad"), d ? c.version && (c.version = c.version.split(/\./).slice(0, 2).join("."), d = d + " " + c.version) : d = b.t("browsers.unrecognized", "Unrecognized Browser"), d
    }, c.fileSize = function (a) {
        var b = 1024;
        return a < b ? parseInt(a, 10) + " bytes" : a < b * b ? parseInt(a / b, 10) + "KB" : Math.round(10 * a / b / b) / 10 + "MB"
    }, c.getUserServices = function (a, b, d) {
        c.isArray(a) || (a = [a]);
        var e = "/services?service_types=" + a.join(",");
        c.ajaxJSON(e, "GET", {}, function (a) {
            b && b(a)
        }, function (a) {
            d && d(a)
        })
    };
    var h;
    c.findLinkForService = function (a, d) {
        var g = c("#instructure_bookmark_search");
        g.length || (g = c("<div id='instructure_bookmark_search'/>"), g.append("<form id='bookmark_search_form' style='margin-bottom: 5px;'><img src='/images/blank.png'/>&nbsp;&nbsp;<input type='text' class='query' style='width: 230px;'/><button class='btn search_button' type='submit'>" + e(b.t("buttons.search", "Search")) + "</button></form>"), g.append("<div class='results' style='max-height: 200px; overflow: auto;'/>"), g.find("form").submit(function (d) {
            d.preventDefault(), d.stopPropagation();
            var i = new Date;
            if (a == "diigo" && h && i - h < 15e3) {
                setTimeout(function () {
                    g.find("form").submit()
                }, 15e3 - (i - h)), g.find(".results").empty().append(e(b.t("status.diigo_search_throttling", "Diigo limits users to one search every ten seconds.  Please wait...")));
                return
            }
            g.find(".results").empty().append(e(b.t("status.searching", "Searching..."))), h = new Date;
            var j = g.find(".query").val(),
                k = c.replaceTags(g.data("reference_url"), "query", j);
            c.ajaxJSON(k, "GET", {}, function (a) {
                g.find(".results").empty(), a.length || g.find(".results").append(e(b.t("no_results_found", "No Results Found")));
                for (var d in a) a[d].short_title = a[d].title, a[d].title == a[d].description && (a[d].short_title = f.truncateText(a[d].description, {
                    max: 30
                })), c("<div class='bookmark'/>").appendTo(g.find(".results")).append(c('<a class="bookmark_link" style="font-weight: bold;"/>').attr({
                    href: a[d].url,
                    title: a[d].title
                }).text(a[d].short_title)).append(c("<div style='margin: 5px 10px; font-size: 0.8em;'/>").text(a[d].description || b.t("no_description", "No description")))
            }, function () {
                g.find(".results").empty().append(e(b.t("errors.search_failed", "Search failed, please try again.")))
            })
        }), g.delegate(".bookmark_link", "click", function (a) {
            a.preventDefault();
            var b = c(this).attr("href"),
                e = c(this).attr("title") || c(this).text();
            g.dialog("close"), d({
                url: b,
                title: e
            })
        })), g.find(".search_button").text(a == "delicious" ? b.t("buttons.search_by_tag", "Search by Tag") : b.t("buttons.search", "Search")), g.find("form img").attr("src", "/images/" + a + "_small_icon.png");
        var i = "/search/bookmarks?q=%7B%7B+query+%7D%7D&service_type=%7B%7B+service_type+%7D%7D";
        i = c.replaceTags(i, "service_type", a), g.data("reference_url", i), g.find(".results").empty().end().find(".query").val(""), g.dialog({
            title: b.t("titles.bookmark_search", "Bookmark Search: %{service_name}", {
                service_name: c.titleize(a)
            }),
            open: function () {
                g.find("input:visible:first").focus().select()
            },
            width: 400
        })
    }, c.findImageForService = function (a, d) {
        var f = c("#instructure_image_search");
        f.find("button").attr("disabled", !1);
        if (!f.length) {
            f = c("<div id='instructure_image_search'/>").append("<form id='image_search_form' class='form-inline' style='margin-bottom: 5px;'><img src='/images/flickr_creative_commons_small_icon.png'/>&nbsp;&nbsp;<input type='text' class='query' style='width: 250px;' placeholder='" + e(b.t("tooltips.enter_search_terms", "enter search terms")) + "'/>" + "<button class='btn' type='submit'>" + e(b.t("buttons.search", "Search")) + "</button></form>").append("<div class='results' style='max-height: 240px; overflow: auto;'/>"), f.find("form").submit(function (a) {
                a.preventDefault(), a.stopPropagation();
                var d = new Date;
                f.find("button").attr("disabled", !0), f.find(".results").empty().append(b.t("status.searching", "Searching...")), f.bind("search_results", function (a, d) {
                    f.find("button").attr("disabled", !1);
                    if (d && d.photos && d.photos.photo) {
                        f.find(".results").empty();
                        for (var g in d.photos.photo) {
                            var h = d.photos.photo[g],
                                i = "https://farm" + h.farm + ".static.flickr.com/" + h.server + "/" + h.id + "_" + h.secret + "_s.jpg",
                                j = "https://farm" + h.farm + ".static.flickr.com/" + h.server + "/" + h.id + "_" + h.secret + ".jpg",
                                k = "https://secure.flickr.com/photos/" + h.owner + "/" + h.id;
                            f.find(".results").append(c('<div class="image" style="float: left; padding: 2px; cursor: pointer;"/>').append(c("<img/>", {
                                data: {
                                    source: k,
                                    big_image_url: j
                                },
                                "class": "image_link",
                                src: i,
                                tabindex: "0",
                                title: "embed " + (h.title || ""),
                                alt: h.title || ""
                            })))
                        }
                    } else f.find(".results").empty().append(e(b.t("errors.search_failed", "Search failed, please try again.")))
                });
                var g = encodeURIComponent(f.find(".query").val());
                c.getScript("https://secure.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=734839aadcaa224c4e043eaf74391e50&per_page=25&license=1,2,3,4,5,6&sort=relevance&text=" + g)
            });
            var g = function (a) {
                    f.dialog("close"), d({
                        image_url: c(a).data("big_image_url") || c(a).attr("src"),
                        link_url: c(a).data("source"),
                        title: c(a).attr("alt")
                    })
                };
            f.delegate(".image_link", "click", function (a) {
                a.preventDefault(), g(this)
            }), f.delegate(".image_link", "keyup", function (a) {
                a.preventDefault();
                var b = a.keyCode || a.which;
                b == 13 && g(this)
            })
        }
        f.find("form img").attr("src", "/images/" + a + "_small_icon.png");
        var h = c("#editor_tabs .bookmark_search_url").attr("href");
        h = c.replaceTags(h, "service_type", a), f.data("reference_url", h || ""), f.find(".results").empty(), f.find(".query").val(""), f.dialog({
            title: b.t("titles.image_search", "Image Search: %{service_name}", {
                service_name: c.titleize(a)
            }),
            width: 440,
            open: function () {
                f.find("input:visible:first").focus().select()
            },
            height: 320
        })
    }, c.toSentence = function (a, d) {
        typeof d == "undefined" ? d = {} : d == "or" && (d = {
            two_words_connector: b.t("#support.array.or.two_words_connector"),
            last_word_connector: b.t("#support.array.or.last_word_connector")
        }), d = c.extend({
            words_connector: b.t("#support.array.words_connector"),
            two_words_connector: b.t("#support.array.two_words_connector"),
            last_word_connector: b.t("#support.array.last_word_connector")
        }, d);
        switch (a.length) {
        case 0:
            return "";
        case 1:
            return "" + a[0];
        case 2:
            return a[0] + d.two_words_connector + a[1];
        default:
            return a.slice(0, -1).join(d.words_connector) + d.last_word_connector + a[a.length - 1]
        }
    }, c.queryParam = function (a) {
        a = a.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var b = new RegExp("[\\?&]" + a + "=([^&#]*)"),
            c = b.exec(window.location.search);
        return c == null ? c : decodeURIComponent(c[1].replace(/\+/g, " "))
    }, c.capitalize = function (a) {
        return a.charAt(0).toUpperCase() + a.substring(1).toLowerCase()
    }, a.youTubeRegEx = /^https?:\/\/(www\.youtube\.com\/watch.*v(=|\/)|youtu\.be\/)([^&#]*)/, c.youTubeID = function (b) {
        var c = b.match(a.youTubeRegEx);
        return c && c[c.length - 1] ? c[c.length - 1] : null
    }
}), function () {
    var a = [].slice,
        b = [].indexOf ||
    function (a) {
        for (var b = 0, c = this.length; b < c; b++) if (b in this && this[b] === a) return b;
        return -1
    };
    define("compiled/handlebars_helpers", ["compiled/util/enrollmentName", "handlebars", "i18nObj", "jquery", "underscore", "str/htmlEscape", "compiled/util/semanticDateRange", "compiled/util/dateSelect", "compiled/util/mimeClass", "compiled/str/convertApiUserContent", "compiled/str/TextHelper", "jquery.instructure_date_and_time", "jquery.instructure_misc_helpers", "jquery.instructure_misc_plugins", "translations/_core_en"], function (c, d, e, f, g, h, i, j, k, l, m) {
        var n, o, p;
        p = {
            t: function (a, b, c) {
                var d, g, h, i, j;
                i = {}, c = (j = c != null ? c.hash : void 0) != null ? j : {}, g = c.scope, delete c.scope;
                for (d in c) {
                    h = c[d];
                    if (!d.match(/^w\d+$/)) continue;
                    i[(new Array(parseInt(d.replace("w", "")) + 2)).join("*")] = h, delete c[d]
                }
                return i["*"] && (c.wrapper = i), c.needsEscaping = !0, this instanceof String || typeof this == "string" || (c = f.extend(c, this)), e.scoped(g).t(a, b, c)
            },
            hiddenIf: function (a) {
                if (a) return " display:none; "
            },
            hiddenUnless: function (a) {
                if (!a) return " display:none; "
            },
            semanticDateRange: function () {
                return new d.SafeString(i.apply(null, arguments))
            },
            friendlyDatetime: function (a, b) {
                var c, e;
                e = b.hash.pubdate;
                if (a == null) return;
                return g.isDate(a) && (a = f.dateToISO8601UTC(a)), c = f.parseFromISO(a), new d.SafeString("<time title='" + c.datetime_formatted + "' datetime='" + c.datetime.toISOString() + "' " + (e ? "pubdate" : void 0) + ">" + f.friendlyDatetime(c.datetime) + "</time>")
            },
            formattedDate: function (a, b, c) {
                var e;
                e = c.hash.pubdate;
                if (a == null) return;
                return new d.SafeString("<time title='" + a + "' datetime='" + a.toISOString() + "' " + (e ? "pubdate" : void 0) + ">" + a.toString(b) + "</time>")
            },
            datetimeFormatted: function (a) {
                return a ? (a.datetime || (a = f.parseFromISO(a)), a.datetime_formatted) : ""
            },
            dateString: function (a) {
                return a ? (a.datetime || (a = f.parseFromISO(a)), a.date_string) : ""
            },
            minutesToHM: function (a) {
                var b, c, d;
                return b = Math.floor(a / 60), d = a % 60, c = d < 10 ? "0" + d : d, "" + b + ":" + c
            },
            addIcon: function (a) {
                return new d.SafeString("<i class='icon-" + h(a) + "'></i>")
            },
            dateToString: function (a, b) {
                return a == null && (a = ""), a.toString(b)
            },
            tDateToString: function (a, b) {
                return a == null && (a = ""), a ? e.l("date.formats." + b, a) : ""
            },
            tTimeToString: function (a, b) {
                return a == null && (a = ""), a ? e.l("time.formats." + b, a) : ""
            },
            tTimeHours: function (a) {
                return a == null && (a = ""), a.getMinutes() === 0 && a.getSeconds() === 0 ? e.l("time.formats.tiny_on_the_hour", a) : e.l("time.formats.tiny", a)
            },
            tEventToString: function (a, b, c) {
                return a == null && (a = ""), b == null && (b = "short"), c == null && (c = "tiny"), e.t("time.event", {
                    date: e.l("date.formats." + b, a),
                    time: e.l("time.formats." + c, a)
                })
            },
            strftime: function (a, b) {
                return a == null && (a = ""), e.strftime(a, b)
            },
            mimeClass: k,
            convertApiUserContent: function (a, b) {
                var c;
                return c = b.hash, new d.SafeString(l(a, c))
            },
            newlinesToBreak: function (a) {
                return a || (a = ""), new d.SafeString(h(a).replace(/\n/g, "<br />"))
            },
            not: function (a) {
                return !a
            },
            ifEqual: function () {
                var b, c, d, e, f, g, h, i;
                e = arguments[0], c = 3 <= arguments.length ? a.call(arguments, 1, f = arguments.length - 1) : (f = 1, []), i = arguments[f++], n = i.fn, d = i.inverse;
                for (g = 0, h = c.length; g < h; g++) {
                    b = c[g];
                    if (b !== e) return d(this);
                    e = b
                }
                return n(this)
            },
            ifAll: function () {
                var b, c, d, e, f, g, h;
                c = 2 <= arguments.length ? a.call(arguments, 0, e = arguments.length - 1) : (e = 0, []), h = arguments[e++], n = h.fn, d = h.inverse;
                for (f = 0, g = c.length; f < g; f++) {
                    b = c[f];
                    if (!b) return d(this)
                }
                return n(this)
            },
            ifAny: function () {
                var b, c, d, e, f, g, h;
                c = 2 <= arguments.length ? a.call(arguments, 0, e = arguments.length - 1) : (e = 0, []), h = arguments[e++], n = h.fn, d = h.inverse;
                for (f = 0, g = c.length; f < g; f++) {
                    b = c[f];
                    if (b) return n(this)
                }
                return d(this)
            },
            eachWithIndex: function (a, b) {
                var c, d, e, f;
                n = b.fn, e = b.inverse, f = "";
                if (a && a.length > 0) for (d in a) c = a[d], c._index = d, f += n(c);
                else f = e(this);
                return f
            },
            eachProp: function (a, b) {
                var c;
                return function () {
                    var d;
                    d = [];
                    for (c in a) d.push(b.fn({
                        property: c,
                        value: a[c]
                    }));
                    return d
                }().join("")
            },
            toSentence: function (a, b) {
                var c;
                return c = g.map(a, function (a) {
                    return b.fn(a)
                }), f.toSentence(c)
            },
            dateSelect: function (a, b) {
                return new d.SafeString(j(a, b.hash).html())
            },
            checkbox: function (a, b) {
                var c, e, f, i, j, k, l, m, n, o, p, q, r;
                f = b.hash, m = a.split(/\./), l = m.join("_"), f.prefix && (m.unshift(f.prefix), delete f.prefix), e = m[0] + g.chain(m).rest().map(function (a) {
                    return "[" + a + "]"
                }).value().join(""), i = g.extend({
                    type: "checkbox",
                    value: 1,
                    id: l,
                    name: e
                }, f), i.checked == null && (o = g.reduce(m, function (a, b) {
                    if (a != null) return a[b]
                }, this), o && (i.checked = !0)), r = ["checked", "disabled"];
                for (p = 0, q = r.length; p < q; p++) k = r[p], i[k] ? i[k] = k : delete i[k];
                return i.uniqid && i.id && (i.id += "-" + d.helpers.uniqid.call(this)), delete i.uniqid, c = function () {
                    var a;
                    a = [];
                    for (j in i) n = i[j], n != null && a.push("" + h(j) + '="' + h(n) + '"');
                    return a
                }(), new d.SafeString('<input name="' + h(i.name) + '" type="hidden" value="0" />\n<input ' + c.join(" ") + " />")
            },
            toPercentage: function (a) {
                return parseInt(100 * a) + "%"
            },
            toPrecision: function (a, b) {
                return a ? parseFloat(a).toPrecision(b) : ""
            },
            checkedIf: function (a, b, c) {
                return arguments.length === 3 ? a === b ? "checked" : "" : a ? "checked" : ""
            },
            selectedIf: function (a, b, c) {
                return arguments.length === 3 ? a === b ? "selected" : "" : a ? "selected" : ""
            },
            disabledIf: function (a, b) {
                return a ? "disabled" : ""
            },
            checkedUnless: function (a) {
                return a ? "" : "checked"
            },
            join: function (a, b, c) {
                return b == null && (b = ","), a ? a.join(b) : ""
            },
            ifIncludes: function (a, c, d) {
                return a ? b.call(a, c) >= 0 ? d.fn(this) : d.inverse(this) : !1
            },
            disabledIfIncludes: function (a, c) {
                return a ? b.call(a, c) >= 0 ? "disabled" : "" : ""
            },
            truncate_left: function (a, b) {
                return m.truncateText(a.split("").reverse().join(""), {
                    max: b
                }).split("").reverse().join("")
            },
            truncate: function (a, b) {
                return m.truncateText(a, {
                    max: b
                })
            },
            enrollmentName: c,
            list: function (a, b) {
                var c, d, e, f, h, i, j;
                return g.defaults(b.hash, {
                    separator: ", ",
                    propName: null,
                    limit: null,
                    end: "..."
                }), j = b.hash, e = j.propName, d = j.limit, c = j.end, h = j.separator, f = g.map(a, function (a) {
                    return e ? a[e] : a
                }), d && (f = f.slice(0, d)), i = f.join(h), d && a.length > d ? "" + i + c : i
            },
            titleize: function (a) {
                var b, c;
                return a ? (c = a.split(/[ _]+/), b = g(c).map(function (a) {
                    return a[0].toUpperCase() + a.slice(1)
                }), b.join(" ")) : ""
            },
            uniqid: function (a) {
                var b;
                return arguments.length <= 1 && (a = this), a._uniqid_ || (b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", a._uniqid_ = function () {
                    var a, c;
                    c = [];
                    for (a = 1; a <= 8; a++) c.push(b.charAt(Math.floor(Math.random() * b.length)));
                    return c
                }().join("")), a._uniqid_
            },
            view: function (a) {
                var b, c, e;
                return c = function (a) {
                    return (window.requestAnimationFrame || setTimeout)(a, 0)
                }, b = "placeholder-" + f.guid++, e = function () {
                    var d;
                    return d = f("#" + b), d.length ? d.replaceWith(a.$el) : c(e)
                }, a.render(), c(e), new d.SafeString('<span id="' + b + '">pk</span>')
            }
        };
        for (o in p) n = p[o], d.registerHelper(o, n);
        return d
    })
}.call(this), define("jst/courseList/wrapper", ["compiled/handlebars_helpers", "i18n!course_list.wrapper"], function (a) {
    var b = a.template,
        c = a.templates = a.templates || {};
    return c["courseList/wrapper"] = b(function (a, b, c, d, e) {
        this.compilerInfo = [4, ">= 1.0.0"], c = this.merge(c, a.helpers), e = e || {};
        var f = "",
            g, h, i, j = c.helperMissing;
        f += '<div class="customListWrapper">\n  <button class="btn btn-small customListRestore">', i = {
            hash: {
                scope: "course_list.wrapper"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "reset_course_menu", "Reset", i) : j.call(b, "t", "reset_course_menu", "Reset", i));
        if (h || h === 0) f += h;
        f += '</button>\n  <a class="customListClose" href="#" title=\'', i = {
            hash: {
                scope: "course_list.wrapper"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "close_course_menu_title", "close", i) : j.call(b, "t", "close_course_menu_title", "close", i));
        if (h || h === 0) f += h;
        f += "' aria-label='", i = {
            hash: {
                scope: "course_list.wrapper"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "close_course_menu_title", "close", i) : j.call(b, "t", "close_course_menu_title", "close", i));
        if (h || h === 0) f += h;
        return f += '\' role="button"></a>\n  <ul class="customListContent menu-item-drop-column-list"></ul>\n</div>', f
    }), c["courseList/wrapper"]
}), define("jst/courseList/content", ["compiled/handlebars_helpers"], function (a) {
    var b = a.template,
        c = a.templates = a.templates || {};
    return c["courseList/content"] = b(function (a, b, c, d, e) {
        function k(a, b) {
            var d = "",
                e;
            d += '\n  <li class="customListItem" data-id="', (e = c.id) ? e = e.call(a, {
                hash: {},
                data: b
            }) : (e = a && a.id, e = typeof e === h ? e.call(a, {
                hash: {},
                data: b
            }) : e), d += i(e) + '">\n    <a href="', (e = c.href) ? e = e.call(a, {
                hash: {},
                data: b
            }) : (e = a && a.href, e = typeof e === h ? e.call(a, {
                hash: {},
                data: b
            }) : e), d += i(e) + '" role="checkbox">\n      <span class="name ellipsis" title="', (e = c.longName) ? e = e.call(a, {
                hash: {},
                data: b
            }) : (e = a && a.longName, e = typeof e === h ? e.call(a, {
                hash: {},
                data: b
            }) : e), d += i(e) + '">', (e = c.shortName) ? e = e.call(a, {
                hash: {},
                data: b
            }) : (e = a && a.shortName, e = typeof e === h ? e.call(a, {
                hash: {},
                data: b
            }) : e), d += i(e) + "</span>\n      ", e = c["if"].call(a, a && a.term, {
                hash: {},
                inverse: j.noop,
                fn: j.program(2, l, b),
                data: b
            });
            if (e || e === 0) d += e;
            return d += '\n      <span class="subtitle ellipsis">', (e = c.subtitle) ? e = e.call(a, {
                hash: {},
                data: b
            }) : (e = a && a.subtitle, e = typeof e === h ? e.call(a, {
                hash: {},
                data: b
            }) : e), d += i(e) + "</span>\n    </a>\n  </li>\n", d
        }
        function l(a, b) {
            var d = "",
                e;
            return d += '\n        <span class="subtitle ellipsis enrollment_term menu-item-drop-float-right">', (e = c.term) ? e = e.call(a, {
                hash: {},
                data: b
            }) : (e = a && a.term, e = typeof e === h ? e.call(a, {
                hash: {},
                data: b
            }) : e), d += i(e) + "</span>\n      ", d
        }
        this.compilerInfo = [4, ">= 1.0.0"], c = this.merge(c, a.helpers), e = e || {};
        var f = "",
            g, h = "function",
            i = this.escapeExpression,
            j = this;
        g = c.each.call(b, b && b.items, {
            hash: {},
            inverse: j.noop,
            fn: j.program(1, k, e),
            data: e
        });
        if (g || g === 0) f += g;
        return f += "\n", f
    }), c["courseList/content"]
}), function () {
    define("compiled/widget/CustomList", ["jquery", "compiled/util/objectCollection", "jst/courseList/wrapper", "jst/courseList/content", "jquery.ajaxJSON"], function (a, b, c, d) {
        var e;
        return e = function () {
            function e(b, c, d) {
                this.options = a.extend({}, this.options, d), this.appendTarget = a(this.options.appendTarget), this.element = a(b), this.targetList = this.element.find("> ul"), this.wrapper = a(this.options.wrapper({})), this.sourceList = this.wrapper.find("> ul"), this.contentTemplate = this.options.content, this.ghost = a("<ul/>").addClass("customListGhost"), this.requests = {
                    add: {},
                    remove: {}
                }, this.doc = a(document.body), this.attach(), this.setItems(c), this.options.autoOpen && this.open()
            }
            return e.prototype.options = {
                animationDuration: 200,
                dataAttribute: "id",
                wrapper: c,
                content: d,
                url: "/api/v1/users/self/favorites/courses",
                appendTarget: "body",
                resetCount: 12,
                onToggle: !1
            }, e.prototype.open = function (a) {
                var b = this;
                return a && a.preventDefault(), this.wrapper.appendTo(this.appendTarget).show(), setTimeout(function () {
                    var a;
                    return b.element.addClass("customListEditing"), typeof (a = b.options).onToggle == "function" && a.onToggle(!0), document.activeElement.blur(), b.wrapper.find("li a").first().focus()
                }, 1), this.element.find(".customListOpen").attr({
                    "aria-expanded": "true"
                })
            }, e.prototype.close = function (a) {
                var b;
                return a && a.preventDefault(), this.wrapper.hide(), this.element.removeClass("customListEditing"), typeof (b = this.options).onToggle == "function" && b.onToggle(!1), this.pinned.length === 0 && this.resetList(), document.activeElement.blur(), this.element.find(".customListOpen").focus().attr({
                    "aria-expanded": "false"
                })
            }, e.prototype.attach = function () {
                var b;
                return this.element.delegate(".customListOpen", "click", a.proxy(this, "open")), this.wrapper.delegate(".customListClose", "click", a.proxy(this, "close")), this.wrapper.delegate(".customListRestore", "click", a.proxy(this, "reset")), this.wrapper.delegate("a", "click.customListTeardown", function (a) {
                    return a.preventDefault()
                }), this.wrapper.delegate(".customListItem", "click.customListTeardown", a.proxy(this, "sourceClickHandler")), b = "customListWrapper-" + a.guid++, this.wrapper.appendTo(this.appendTarget).attr({
                    id: b
                }).hide(), this.element.find(".customListOpen").attr({
                    role: "button",
                    "aria-expanded": "false",
                    "aria-controls": b
                })
            }, e.prototype.setOn = function (a, b) {
                return a.toggleClass("on", b), a.find("a").attr("aria-checked", b.toString())
            }, e.prototype.add = function (a, b) {
                var c, d, e, f;
                return e = this.items.findBy("id", a), c = b.clone().hide(), e.element = c, this.setOn(b, !0), this.pinned.push(e), this.pinned.sortBy("shortName"), d = this.pinned.indexOf(e) + 1, f = this.targetList.find("li:nth-child(" + d + ")"), f.length !== 0 ? c.insertBefore(f) : c.appendTo(this.targetList), c.slideDown(this.options.animationDuration), this.animateGhost(b, c), this.onAdd(e)
            }, e.prototype.animateGhost = function (a, b) {
                var c, d, e, f = this;
                return d = a.offset(), e = b.offset(), c = a.clone(), d.position = "absolute", this.ghost.append(c), this.ghost.appendTo(this.doc).css(d).animate(e, this.options.animationDuration, function () {
                    return f.ghost.detach().empty()
                })
            }, e.prototype.remove = function (a, b) {
                var c = this;
                return this.setOn(b, !1), this.animating = !0, this.onRemove(a), a.element.slideUp(this.options.animationDuration, function () {
                    return a.element.remove(), c.pinned.eraseBy("id", a.id), c.animating = !1
                })
            }, e.prototype.abortAll = function () {
                var a, b, c, d, e;
                c = this.requests.add;
                for (a in c) b = c[a], b.abort();
                d = this.requests.remove, e = [];
                for (a in d) b = d[a], e.push(b.abort());
                return e
            }, e.prototype.reset = function () {
                var b, c = this;
                return this.abortAll(), b = function () {
                    return delete c.requests.reset
                }, this.requests.reset = a.ajaxJSON(this.options.url, "DELETE", {}, b, b), this.resetList()
            }, e.prototype.resetList = function () {
                var a, b;
                return a = this.items.slice(0, this.options.resetCount), b = this.contentTemplate({
                    items: a
                }), this.targetList.empty().html(b), this.setPinned()
            }, e.prototype.onAdd = function (b) {
                var c, d, e, f, g = this;
                if (this.requests.remove[b.id]) {
                    this.requests.remove[b.id].abort();
                    return
                }
                return e = function () {
                    var a;
                    return a = [].slice.call(arguments), a.unshift(b.id), g.addSuccess.apply(g, a)
                }, c = function () {
                    var a;
                    return a = [].slice.call(arguments), a.unshift(b.id), g.addError.apply(g, a)
                }, f = this.options.url + "/" + b.id, d = a.ajaxJSON(f, "POST", {}, e, c), this.requests.add[b.id] = d
            }, e.prototype.onRemove = function (b) {
                var c, d, e, f, g = this;
                if (this.requests.add[b.id]) {
                    this.requests.add[b.id].abort();
                    return
                }
                return e = function () {
                    var a;
                    return a = [].slice.call(arguments), a.unshift(b.id), g.removeSuccess.apply(g, a)
                }, c = function () {
                    var a;
                    return a = [].slice.call(arguments), a.unshift(b.id), g.removeError.apply(g, a)
                }, f = this.options.url + "/" + b.id, d = a.ajaxJSON(f, "DELETE", {}, e, c), this.requests.remove[b.id] = d
            }, e.prototype.addSuccess = function (a) {
                return delete this.requests.add[a]
            }, e.prototype.addError = function (a) {
                return delete this.requests.add[a]
            }, e.prototype.removeSuccess = function (a) {
                return delete this.requests.remove[a]
            }, e.prototype.removeError = function (a) {
                return delete this.requests.remove[a]
            }, e.prototype.setItems = function (a) {
                var c;
                return this.items = b(a), this.items.sortBy("shortName"), c = this.contentTemplate({
                    items: this.items
                }), this.sourceList.html(c), this.setPinned()
            }, e.prototype.setPinned = function () {
                var c, d, e, f, g, h, i = this;
                this.pinned = b([]), this.element.find("> ul > li").each(function (b, c) {
                    var d, e;
                    c = a(c), d = c.data("id"), d = d && String(d), e = i.items.findBy("id", d);
                    if (!e) return;
                    return e.element = c, i.pinned.push(e)
                }), this.setOn(this.wrapper.find("ul > li"), !1), g = this.pinned, h = [];
                for (e = 0, f = g.length; e < f; e++) c = g[e], d = this.wrapper.find("ul > li[data-id=" + c.id + "]"), h.push(this.setOn(d, !0));
                return h
            }, e.prototype.sourceClickHandler = function (b) {
                return this.checkElement(a(b.currentTarget))
            }, e.prototype.checkElement = function (a) {
                var b, c;
                if (this.animating || this.requests.reset) return;
                return b = a.data("id"), b = b && String(b), c = this.pinned.findBy("id", b), c ? this.remove(c, a) : this.add(b, a)
            }, e
        }()
    })
}.call(this), function () {
    define("compiled/widget/courseList", ["jquery", "compiled/widget/CustomList", "jst/courseList/wrapper", "jst/courseList/content", "vendor/jquery.ba-tinypubsub"], function (a, b, c, d) {
        return {
            init: function () {
                return a(function () {
                    var e, f, g;
                    e = a("#menu_enrollments"), f = e.closest(".menu-item-drop");
                    if (e.length === 0) return;
                    return a.subscribe("menu/hovered", g = function (h) {
                        var i;
                        if (!$(h).find(e).find(".customListOpen").length) return;
                        return a.unsubscribe("menu/hovered", g), i = !1, e.delegate(".customListOpen", "click", function () {
                            return i = !0
                        }), a.getJSON("/all_menu_courses", function (a) {
                            var e;
                            return e = new b("#menu_enrollments", a, {
                                appendTarget: "#menu_enrollments .menu-item-customize",
                                autoOpen: i,
                                wrapper: c,
                                content: d,
                                onToggle: function (a) {
                                    return f.toggleClass("menuCustomListEditing", a)
                                }
                            })
                        })
                    })
                })
            }
        }
    })
}.call(this), define("jst/helpDialog", ["compiled/handlebars_helpers", "i18n!help_dialog"], function (a) {
    var b = a.template,
        c = a.templates = a.templates || {};
    return c.helpDialog = b(function (a, b, c, d, e) {
        function n(a, b) {
            var d = "",
                e;
            d += '\n      <li>\n        <a href="', e = c["if"].call(a, a && a.url, {
                hash: {},
                inverse: l.program(4, p, b),
                fn: l.program(2, o, b),
                data: b
            });
            if (e || e === 0) d += e;
            return d += '" target="_blank">\n          <span class="text">', (e = c.text) ? e = e.call(a, {
                hash: {},
                data: b
            }) : (e = a && a.text, e = typeof e === j ? e.call(a, {
                hash: {},
                data: b
            }) : e), d += k(e) + '</span>\n          <span class="subtext">', (e = c.subtext) ? e = e.call(a, {
                hash: {},
                data: b
            }) : (e = a && a.subtext, e = typeof e === j ? e.call(a, {
                hash: {},
                data: b
            }) : e), d += k(e) + "</span>\n        </a>\n      </li>\n    ", d
        }
        function o(a, b) {
            var d;
            return (d = c.url) ? d = d.call(a, {
                hash: {},
                data: b
            }) : (d = a && a.url, d = typeof d === j ? d.call(a, {
                hash: {},
                data: b
            }) : d), k(d)
        }
        function p(a, b) {
            return "#"
        }
        this.compilerInfo = [4, ">= 1.0.0"], c = this.merge(c, a.helpers), e = e || {};
        var f = "",
            g, h, i, j = "function",
            k = this.escapeExpression,
            l = this,
            m = c.helperMissing;
        f += '<div id="help-dialog">\n  <ul id="help-dialog-options" class="help-dialog-pane">\n    ', g = c.each.call(b, b && b.helpLinks, {
            hash: {},
            inverse: l.noop,
            fn: l.program(1, n, e),
            data: e
        });
        if (g || g === 0) f += g;
        f += '\n  </ul>\n  <form class="help-dialog-pane" id="teacher_feedback" style="display:none" action="/api/v1/conversations" method="POST">\n    <label for="teacher-feedback-recipients">\n      ', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "which_course_is_this_question_about", "Which course is this question about?", i) : m.call(b, "t", "which_course_is_this_question_about", "Which course is this question about?", i));
        if (h || h === 0) f += h;
        f += "\n      <small>", i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "message_will_be_sent_to_all_the_teachers_tas_in_the_course", "Message will be sent to all the Teachers / TA's in the course.", i) : m.call(b, "t", "message_will_be_sent_to_all_the_teachers_tas_in_the_course", "Message will be sent to all the Teachers / TA's in the course.", i));
        if (h || h === 0) f += h;
        f += '</small>\n    </label>\n    <select class="input-block-level" name="recipients[]" id="teacher-feedback-recipients"></select>\n    <label for="teacher-feedback-body">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "message", "Message", i) : m.call(b, "t", "message", "Message", i));
        if (h || h === 0) f += h;
        f += '</label>\n    <textarea id="teacher-feedback-body" name="body"></textarea>\n    <div class="button-container">\n      <button type="submit" class="btn" data-text-while-loading="', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "sending", "Sending...", i) : m.call(b, "t", "sending", "Sending...", i));
        if (h || h === 0) f += h;
        f += '">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "send_message", "Send Message", i) : m.call(b, "t", "send_message", "Send Message", i));
        if (h || h === 0) f += h;
        f += '</button>\n    </div>\n  </form>\n  <form class="help-dialog-pane bootstrap-form" id="create_ticket" style="display:none" action="/errors" method="POST">\n    <h4>', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "file_a_ticket_for_a_personal_response_from_our_support_team", "File a ticket for a personal response from our support team", i) : m.call(b, "t", "file_a_ticket_for_a_personal_response_from_our_support_team", "File a ticket for a personal response from our support team", i));
        if (h || h === 0) f += h;
        f += '</h4>\n    <div aria-alert="true" class="alert">\n      <strong>', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "for_an_instant_answer", "For an instant answer:", i) : m.call(b, "t", "for_an_instant_answer", "For an instant answer:", i));
        if (h || h === 0) f += h;
        f += "</strong>\n      <div>", i = {
            hash: {
                scope: "help_dialog",
                w0: '<a target="_blank" href="http://guides.instructure.com/">$1</a>'
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "see_if_your_issue_is_addressed_in_the_canvas_guides", "See if your issue is addressed in the *Canvas Guides*.", i) : m.call(b, "t", "see_if_your_issue_is_addressed_in_the_canvas_guides", "See if your issue is addressed in the *Canvas Guides*.", i));
        if (h || h === 0) f += h;
        f += '</div>\n    </div>\n    <div>\n      <label for="error_subject">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "subject", "Subject", i) : m.call(b, "t", "subject", "Subject", i));
        if (h || h === 0) f += h;
        f += '</label>\n      <input type="text" class="input-block-level" id="error_subject" name="error[subject]" />\n    </div>\n    <div>\n      <label for="error-comments">\n        ', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "description", "Description", i) : m.call(b, "t", "description", "Description", i));
        if (h || h === 0) f += h;
        f += "\n        <small>", i = {
            hash: {
                scope: "help_dialog",
                w0: '<a target="_blank" href="http://www.techsmith.com/download/jing">$1</a>'
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "include_a_link_to_a_screencast_or_screenshot_using_something_like_jing", "Include a link to a screencast/screenshot using something like *Jing*.", i) : m.call(b, "t", "include_a_link_to_a_screencast_or_screenshot_using_something_like_jing", "Include a link to a screencast/screenshot using something like *Jing*.", i));
        if (h || h === 0) f += h;
        f += '</small>\n      </label>\n      <textarea class="input-block-level" id="error-comments" name="error[comments]"></textarea>\n    </div>\n    <label for="severity">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "how_is_this_affecting_you", "How is this affecting you?", i) : m.call(b, "t", "how_is_this_affecting_you", "How is this affecting you?", i));
        if (h || h === 0) f += h;
        f += '</label>\n    <select class="input-block-level" name="error[user_perceived_severity]" id="severity">\n      <option value="">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "please_select_one", "Please select one...", i) : m.call(b, "t", "please_select_one", "Please select one...", i));
        if (h || h === 0) f += h;
        f += '</option>\n      <option value="just_a_comment">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "just_a_casual_question_comment_idea_suggestion", "Just a casual question, comment, idea, suggestion", i) : m.call(b, "t", "just_a_casual_question_comment_idea_suggestion", "Just a casual question, comment, idea, suggestion", i));
        if (h || h === 0) f += h;
        f += '</option>\n      <option value="not_urgent">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "i_need_some_help_but_its_not_urgent", "I need some help but it's not urgent", i) : m.call(b, "t", "i_need_some_help_but_its_not_urgent", "I need some help but it's not urgent", i));
        if (h || h === 0) f += h;
        f += '</option>\n      <option value="workaround_possible">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "somethings_broken_but_i_can_work_around_it_for_now", "Something's broken but I can work around it for now", i) : m.call(b, "t", "somethings_broken_but_i_can_work_around_it_for_now", "Something's broken but I can work around it for now", i));
        if (h || h === 0) f += h;
        f += '</option>\n      <option value="blocks_what_i_need_to_do">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "i_cant_get_things_done_until_i_hear_back_from_you", "I can't get things done until I hear back from you", i) : m.call(b, "t", "i_cant_get_things_done_until_i_hear_back_from_you", "I can't get things done until I hear back from you", i));
        if (h || h === 0) f += h;
        f += '</option>\n      <option value="extreme_critical_emergency">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "extreme_critical_emergency", "EXTREME CRITICAL EMERGENCY!!", i) : m.call(b, "t", "extreme_critical_emergency", "EXTREME CRITICAL EMERGENCY!!", i));
        if (h || h === 0) f += h;
        f += '</option>\n    </select>\n    <div style="', i = {
            hash: {},
            data: e
        }, f += k((g = c.hiddenUnless || b && b.hiddenUnless, g ? g.call(b, b && b.showEmail, i) : m.call(b, "hiddenUnless", b && b.showEmail, i))) + '">\n      <label for="error-email">', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "your_email_address", "Your email address", i) : m.call(b, "t", "your_email_address", "Your email address", i));
        if (h || h === 0) f += h;
        f += '</label>\n      <input class="input-block-level" type="email" name="error[email]" id="error-email">\n    </div>\n    <input class="input-block-level" type="hidden" name="error[url]" value="', (h = c.url) ? h = h.call(b, {
            hash: {},
            data: e
        }) : (h = b && b.url, h = typeof h === j ? h.call(b, {
            hash: {},
            data: e
        }) : h), f += k(h) + '">\n    <input class="input-block-level" type="hidden" name="error[context_asset_string]" value="', (h = c.contextAssetString) ? h = h.call(b, {
            hash: {},
            data: e
        }) : (h = b && b.contextAssetString, h = typeof h === j ? h.call(b, {
            hash: {},
            data: e
        }) : h), f += k(h) + '">\n    <input class="input-block-level" type="hidden" name="error[user_roles]" value="', (h = c.userRoles) ? h = h.call(b, {
            hash: {},
            data: e
        }) : (h = b && b.userRoles, h = typeof h === j ? h.call(b, {
            hash: {},
            data: e
        }) : h), f += k(h) + '">\n    <div class="button-container">\n      <button type="submit" data-text-while-loading="', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "Submitting_Ticket", "Submitting Ticket...", i) : m.call(b, "t", "Submitting_Ticket", "Submitting Ticket...", i));
        if (h || h === 0) f += h;
        f += '" class="btn submit_button"><img src="/images/email.png" alt=""/>', i = {
            hash: {
                scope: "help_dialog"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "submit_this_support_request", "Submit Ticket", i) : m.call(b, "t", "submit_this_support_request", "Submit Ticket", i));
        if (h || h === 0) f += h;
        return f += "</button>\n    </div>\n  </form>\n</div>\n", f
    }), c.helpDialog
}), define("jst/registration/incompleteRegistrationWarning", ["compiled/handlebars_helpers", "i18n!registration.incomplete_registration_warning"], function (a) {
    var b = a.template,
        c = a.templates = a.templates || {};
    return c["registration/incompleteRegistrationWarning"] = b(function (a, b, c, d, e) {
        this.compilerInfo = [4, ">= 1.0.0"], c = this.merge(c, a.helpers), e = e || {};
        var f = "",
            g, h, i, j = c.helperMissing;
        f += '<div style="margin:1em 2em;font-size:1.1em">\n  <p>\n    ', i = {
            hash: {
                scope: "registration.incomplete_registration_warning",
                w0: "<b>$1</b>"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "set_up_account", "Your account is almost set up. To finish, please check your email at *%{email}* to set your password.", i) : j.call(b, "t", "set_up_account", "Your account is almost set up. To finish, please check your email at *%{email}* to set your password.", i));
        if (h || h === 0) f += h;
        f += "\n  </p>\n  <p>\n    ", i = {
            hash: {
                scope: "registration.incomplete_registration_warning"
            },
            data: e
        }, h = (g = c.t || b && b.t, g ? g.call(b, "start_participating", "You can start participating now, but you must set a password before you can log back in.", i) : j.call(b, "t", "start_participating", "You can start participating now, but you must set a password before you can log back in.", i));
        if (h || h === 0) f += h;
        return f += "\n  </p>\n</div>", f
    }), c["registration/incompleteRegistrationWarning"]
}), function () {
    define("compiled/registration/incompleteRegistrationWarning", ["jquery", "i18n!registration", "jst/registration/incompleteRegistrationWarning"], function (a, b, c) {
        if (ENV.INCOMPLETE_REGISTRATION) return a(c({
            email: ENV.USER_EMAIL
        })).appendTo(a("body")).dialog({
            title: b.t("welcome_to_canvas", "Welcome to Canvas!"),
            width: 400,
            resizable: !1,
            buttons: [{
                text: b.t("get_started", "Get Started"),
                click: function () {
                    return a(this).dialog("close")
                },
                "class": "btn-primary"
            }]
        })
    })
}.call(this), function () {
    var a = [].indexOf ||
    function (a) {
        for (var b = 0, c = this.length; b < c; b++) if (b in this && this[b] === a) return b;
        return -1
    };
    define("compiled/helpDialog", ["i18n!help_dialog", "jst/helpDialog", "jquery", "underscore", "INST", "str/htmlEscape", "compiled/fn/preventDefault", "jquery.instructure_misc_helpers", "jqueryui/dialog", "jquery.disableWhileLoading"], function (b, c, d, e, f, g, h) {
        var i, j;
        return j = !ENV.current_user_id, i = {
            defaultTitle: b.t("Help", "Help"),
            initDialog: function () {
                var b = this;
                return this.$dialog = d('<div style="padding:0; overflow: visible;" />').dialog({
                    resizable: !1,
                    width: 400,
                    title: this.defaultTitle,
                    close: function () {
                        return b.switchTo("#help-dialog-options")
                    }
                }), this.$dialog.dialog("widget").delegate('a[href="#teacher_feedback"],                                          a[href="#create_ticket"],                                          a[href="#help-dialog-options"]', "click", h(function (a) {
                    var c;
                    return c = a.currentTarget, b.switchTo(d(c).attr("href"))
                })), this.helpLinksDfd = d.getJSON("/help_links").done(function (f) {
                    var g;
                    return f = d.grep(f, function (b) {
                        return e.detect(b.available_to, function (b) {
                            return b === "user" || ENV.current_user_roles && a.call(ENV.current_user_roles, b) >= 0
                        })
                    }), g = {
                        showEmail: j,
                        helpLinks: f,
                        url: window.location,
                        contextAssetString: ENV.context_asset_string,
                        userRoles: ENV.current_user_roles
                    }, b.$dialog.html(c(g)), b.initTicketForm(), d(b).trigger("ready")
                }), this.$dialog.disableWhileLoading(this.helpLinksDfd), this.dialogInited = !0
            },
            initTicketForm: function () {
                var a, b = this;
                return a = this.$dialog.find("#create_ticket").formSubmit({
                    disableWhileLoading: !0,
                    required: function () {
                        var a;
                        return a = ["error[subject]", "error[comments]", "error[user_perceived_severity]"], j && a.push("error[email]"), a
                    },
                    success: function () {
                        return b.$dialog.dialog("close"), a.find(":input").val("")
                    }
                })
            },
            switchTo: function (a) {
                var c, e, f, g, h = this;
                return g = "#teacher_feedback, #create_ticket", this.$dialog.find(g).hide(), e = this.$dialog.find(a), c = e.show().outerHeight(), this.$dialog.animate({
                    left: g.match(a) ? -400 : 0,
                    height: c
                }, {
                    step: function () {
                        return h.$dialog.dialog("option", "position", "center")
                    },
                    duration: 100,
                    complete: function () {
                        return e.find(":input").not(":disabled").first().focus()
                    }
                }), (f = this.$dialog.find("a[href='" + a + "'] .text").text()) ? f = d("          <a class='ui-dialog-header-backlink' href='#help-dialog-options'>            " + b.t("Back", "Back") + "          </a>          <span>" + f + "</span>        ") : f = this.defaultTitle, this.$dialog.dialog("option", "title", f)
            },
            open: function () {
                return i.dialogInited || i.initDialog(), i.$dialog.dialog("open"), i.initTeacherFeedback()
            },
            initTeacherFeedback: function () {
                var b, c, e, f = this;
                e = ENV.current_user_roles && a.call(ENV.current_user_roles, "student") >= 0;
                if (!this.teacherFeedbackInited && e) return this.teacherFeedbackInited = !0, c = d.getJSON("/api/v1/courses.json"), b = null, this.helpLinksDfd.done(function () {
                    return b = f.$dialog.find("#teacher_feedback").disableWhileLoading(c).formSubmit({
                        disableWhileLoading: !0,
                        required: ["recipients[]", "body"],
                        success: function () {
                            return f.$dialog.dialog("close")
                        }
                    })
                }), d.when(c, this.helpLinksDfd).done(function (a) {
                    var c, e;
                    return c = a[0], e = d.map(c, function (a) {
                        return "<option value='course_" + a.id + "_admins' " + (ENV.context_id === a.id ? "selected" : "") + ">              " + g(a.name) + "            </option>"
                    }), b.find('[name="recipients[]"]').html(e.join(""))
                })
            },
            initTriggers: function () {
                return d(".help_dialog_trigger").click(h(this.open))
            }
        }
    })
}.call(this), function () {
    var a = [].slice;
    define("compiled/userSettings", ["underscore", "jquery", "jquery.instructure_misc_helpers"], function (b, c) {
        var d, e, f, g, h, i;
        f = {}, d = function () {
            var c, d;
            return c = arguments[0], d = 2 <= arguments.length ? a.call(arguments, 1) : [], function (a, e) {
                var f, g, h;
                h = JSON.stringify(e), f = b(d).map(function (a) {
                    return ENV[a]
                }).join("_"), g = localStorage["" + c + "Item"]("_" + f + "_" + a, h);
                if (g) return JSON.parse(g)
            }
        }, i = ["get", "set", "remove"];
        for (g = 0, h = i.length; g < h; g++) e = i[g], f[e] = d(e, "current_user_id"), f["context" + c.capitalize(e)] = d(e, "current_user_id", "context_asset_string");
        return f
    })
}.call(this), define("jquery.doc_previews", ["INST", "i18n!instructure", "jquery", "underscore", "vendor/scribd.view", "str/htmlEscape", "jquery.ajaxJSON", "jquery.google-analytics", "jquery.instructure_misc_helpers", "jquery.loadingImg"], function (a, b, c, d, e, f) {
    var g = {
        "application/vnd.openxmlformats-officedocument.wordprocessingml.template": [1, 1],
        "application/vnd.oasis.opendocument.spreadsheet": [1, 1],
        "application/vnd.sun.xml.writer": [1, 1],
        "application/excel": [1, 1],
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": [1, 1],
        "text/rtf": [1, 1],
        "application/vnd.openxmlformats-officedocument.spreadsheetml.template": [1, 1],
        "application/vnd.sun.xml.impress": [1, 1],
        "application/vnd.sun.xml.calc": [1, 1],
        "application/vnd.ms-excel": [1, 1],
        "application/msword": [1, 1],
        "application/mspowerpoint": [1, 1],
        "application/rtf": [1, 1],
        "application/vnd.oasis.opendocument.presentation": [1, 1],
        "application/vnd.oasis.opendocument.text": [1, 1],
        "application/vnd.openxmlformats-officedocument.presentationml.template": [1, 1],
        "application/vnd.openxmlformats-officedocument.presentationml.slideshow": [1, 1],
        "text/plain": [1, !1],
        "application/vnd.openxmlformats-officedocument.presentationml.presentation": [1, 1],
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document": [1, 1],
        "application/postscript": [1, 1],
        "application/pdf": [1, 1],
        "application/vnd.ms-powerpoint": [1, 1]
    };
    c.filePreviewsEnabled = function () {
        return !(a.disableCrocodocPreviews && a.disableScribdPreviews && a.disableGooglePreviews)
    }, c.isPreviewable = function (b, d) {
        return c.filePreviewsEnabled() && g[b] && (!d || !a["disable" + c.capitalize(d) + "Previews"] && g[b][{
            scribd: 0,
            google: 1
        }[d]])
    }, c.fn.loadDocPreview = function (g) {
        var h = swfobject.getFlashPlayerVersion(),
            i = h && h.major > 9,
            j = a.enableScribdHtml5;
        return this.each(function () {
            function l(a) {
                k.attachment_view_inline_ping_url && (c.ajaxJSON(k.attachment_view_inline_ping_url, "POST", {}, function () {}, function () {}), c.trackEvent("Doc Previews", a, JSON.stringify(k, ["attachment_id", "submission_id", "mimetype", "crocodoc_session_url", "scribd_doc_id"])))
            }
            var h = c(this),
                k = c.extend({
                    width: "100%",
                    height: "400px"
                }, h.data(), g);
            if (!a.disableCrocodocPreviews && k.crocodoc_session_url) {
                var m = c("<iframe/>", {
                    src: k.crocodoc_session_url,
                    width: k.width,
                    height: k.height
                });
                m.appendTo(h), m.load(function () {
                    l("crocodoc"), c.isFunction(k.ready) && k.ready()
                })
            } else if (!a.disableScribdPreviews && k.scribd_doc_id && k.scribd_access_key && (j || e && i)) {
                if (j) {
                    var n = c.extend({
                        auto_size: !1,
                        height: k.height,
                        jsapi_version: 2
                    }, k.scribdParams),
                        o = "//www.scribd.com/embeds/" + k.scribd_doc_id + "/content?" + c.param({
                            start_page: 1,
                            view_mode: "list",
                            access_key: k.scribd_access_key
                        });
                    c('<iframe class="scribd_iframe_embed" src="' + o + '" height="' + n.height + '" data-auto-height="' + n.auto_size + '" width="100%" />').appendTo(h).load(function () {
                        l("scribd"), c.isFunction(k.ready) && k.ready()
                    })
                } else if (e && i) {
                    var p = e.Document.getDoc(k.scribd_doc_id, k.scribd_access_key),
                        q = h.attr("id"),
                        n = c.extend({
                            jsapi_version: 1,
                            disable_related_docs: !0,
                            auto_size: !1,
                            height: k.height,
                            use_ssl: "https:" == document.location.protocol
                        }, k.scribdParams);
                    q || (q = d.uniqueId("scribd_preview_"), h.attr("id", q)), c.each(n, function (a, b) {
                        p.addParam(a, b)
                    }), c.isFunction(k.ready) && p.addEventListener("iPaperReady", k.ready), p.write(q), this.childNodes[0].keyboardShortcutDown = this.childNodes[0].keyboardShortcutUp = function () {}, l("scribd")
                }
            } else if (!a.disableGooglePreviews && (!k.mimeType || c.isPreviewable(k.mimeType, "google")) && k.attachment_id || k.public_url) {
                function r() {
                    var a = "//docs.google.com/viewer?" + c.param({
                        embedded: !0,
                        url: k.public_url
                    });
                    c('<iframe src="' + a + '" height="' + k.height + '" width="100%" />').appendTo(h).load(function () {
                        l("google"), c.isFunction(k.ready) && k.ready()
                    })
                }
                if (k.public_url) r();
                else if (k.attachment_id) {
                    var s = "/files/" + k.attachment_id + "/public_url.json";
                    k.submission_id && (s += "?" + c.param({
                        submission_id: k.submission_id
                    })), h.loadingImage(), c.ajaxJSON(s, "GET", {}, function (a) {
                        h.loadingImage("remove"), a && a.public_url && (c.extend(k, a), r())
                    })
                }
            } else c.filePreviewsEnabled() && (k.attachment_preview_processing ? h.html("<p>" + f(b.t("errors.document_preview_processing", "The document preview is currently being processed. Please try again later.")) + "</p>") : k.attachment_scribd_render_url ? (h.html("<p>" + f(b.t("errors.document_preview_processing", "The document preview is currently being processed. Please try again later.")) + "</p>"), c.ajaxJSON(k.attachment_scribd_render_url, "POST", {}, function () {}, function () {})) : h.html("<p>" + f(b.t("errors.cannot_view_document_inline", "This document cannot be viewed inline.")) + "</p>"))
        })
    }
}), define("jquery.templateData", ["jquery", "str/htmlEscape", "jquery.instructure_misc_helpers"], function (a, b) {
    a.fn.fillTemplateData = function (c) {
        if (this.length && c) {
            c.iterator && this.find("*").andSelf().each(function () {
                var b = a(this);
                a.each(["name", "id", "class"], function (a, d) {
                    b.attr(d) && b.attr(d, b.attr(d).replace(/-iterator-/, c.iterator))
                })
            }), c.id && this.attr("id", c.id);
            var d = !1;
            if (c.data) for (var e in c.data) {
                if (c.except && a.inArray(e, c.except) != -1) continue;
                c.data[e] && c.dataValues && a.inArray(e, c.dataValues) != -1 && this.data(e, c.data[e].toString());
                var f = this.find("." + e),
                    g = c.avoid || "";
                f.each(function () {
                    var f = a(this);
                    if (f.length > 0 && f.closest(g).length === 0) {
                        if (typeof c.data[e] == "undefined" || c.data[e] === null) c.data[e] = "";
                        if (c.htmlValues && a.inArray(e, c.htmlValues) != -1) f.html(c.data[e].toString()), f.hasClass("user_content") && (d = !0, f.removeClass("enhanced"), f.data("unenhanced_content_html", c.data[e].toString()));
                        else if (f[0].tagName.toUpperCase() == "INPUT") f.val(c.data[e]);
                        else try {
                            var h = c.data[e].toString();
                            f.html(b(h))
                        } catch (i) {}
                    }
                })
            }
            c.hrefValues && c.data && this.find("a,span[rel]").each(function () {
                var b = a(this),
                    d, e, f;
                for (var g in c.hrefValues) {
                    var h = c.hrefValues[g];
                    if (d = b.attr("href")) {
                        var i = a.replaceTags(d, h, encodeURIComponent(c.data[h])),
                            j = b.text() == b.html() ? b.text() : null;
                        d != i && (b.attr("href", i), j && b.text(j))
                    }(e = b.attr("rel")) && b.attr("rel", a.replaceTags(e, h, c.data[h])), (f = b.attr("name")) && b.attr("name", a.replaceTags(f, h, c.data[h]))
                }
            }), d && a(document).triggerHandler("user_content_change")
        }
        return this
    }, a.fn.fillTemplateData.defaults = {
        htmlValues: null,
        hrefValues: null
    }, a.fn.getTemplateData = function (b) {
        if (!this.length || !b) return {};
        var c = {},
            d, e;
        if (b.textValues) for (d in b.textValues) {
            var f = this.find("." + b.textValues[d].replace(/\[/g, "\\[").replace(/\]/g, "\\]") + ":first");
            e = a.trim(f.text()), f.html() == "&nbsp;" && (e = ""), e.length == 1 && e.charCodeAt(0) == 160 && (e = ""), c[b.textValues[d]] = e
        }
        if (b.dataValues) for (d in b.dataValues) {
            var e = this.data(b.dataValues[d]);
            e && (c[b.dataValues[d]] = e)
        }
        if (b.htmlValues) for (d in b.htmlValues) {
            var g = this.find("." + b.htmlValues[d].replace(/\[/g, "\\[").replace(/\]/g, "\\]") + ":first");
            e = null, g.hasClass("user_content") && g.data("unenhanced_content_html") ? e = g.data("unenhanced_content_html") : e = a.trim(g.html()), c[b.htmlValues[d]] = e
        }
        return c
    }, a.fn.getTemplateValue = function (b, c) {
        var d = a.extend({}, c, {
            textValues: [b]
        });
        return this.getTemplateData(d)[b]
    }
}), define("media_comments", ["i18n!media_comments", "underscore", "vendor/jquery.ba-tinypubsub", "jquery", "str/htmlEscape", "compiled/jquery/mediaComment", "jquery.ajaxJSON", "jqueryui/dialog", "jquery.instructure_misc_helpers", "jquery.instructure_misc_plugins", "jqueryui/progressbar", "jqueryui/tabs"], function (a, b, c, d, e) {
    function g(a) {
        var b = d.mediaComment.contextCode(),
            e = {
                2: "image",
                5: "audio"
            }[a.mediaType] || "video";
        b && d.ajaxJSON("/media_objects", "POST", {
            id: a.entryId,
            type: e,
            context_code: b,
            title: a.title,
            user_entered_title: a.userTitle
        }, function (a) {
            c.publish("media_object_created", a)
        }, d.noop), c.publish("media_comment_created", {
            id: a.entryId,
            mediaType: e
        })
    }
    d.mediaComment = function (a, b, c) {
        var e = d("<div/>");
        d("body").append(e.hide()), d.fn.mediaComment.apply(e, arguments)
    };
    var f;
    d.mediaComment.partnerData = function (a) {
        var b = {
            context_code: d.mediaComment.contextCode(),
            root_account_id: f || (f = Number(d("#domain_root_account_id").text())),
            context_source: ENV.CONTEXT_ACTION_SOURCE
        };
        return ENV.SIS_SOURCE_ID && (b.sis_source_id = ENV.SIS_SOURCE_ID), ENV.SIS_USER_ID && (b.sis_user_id = ENV.SIS_USER_ID), JSON.stringify(b)
    }, d.mediaComment.contextCode = function () {
        return ENV.context_asset_string || "user_" + ENV.current_user_id
    };
    var h = {};
    d.mediaComment.entryAdded = function (a, b, c, d) {
        if (!a || h[a]) return;
        h[a] = !0;
        var e = {
            mediaType: b,
            entryId: a,
            title: c,
            userTitle: d
        };
        g(e)
    }, d.mediaComment.audio_delegate = {
        readyHandler: function () {
            try {
                d("#audio_upload")[0].setMediaType("audio")
            } catch (a) {
                d.mediaComment.upload_delegate.setupErrorHandler()
            }
        },
        selectHandler: function () {
            d.mediaComment.upload_delegate.selectHandler("audio")
        },
        singleUploadCompleteHandler: function (a) {
            d.mediaComment.upload_delegate.singleUploadCompleteHandler("audio", a)
        },
        allUploadsCompleteHandler: function () {
            d.mediaComment.upload_delegate.allUploadsCompleteHandler("audio")
        },
        entriesAddedHandler: function (a) {
            d.mediaComment.upload_delegate.entriesAddedHandler("audio", a)
        },
        progressHandler: function (a) {
            d.mediaComment.upload_delegate.progressHandler("audio", a[0], a[1], a[2])
        },
        uploadErrorHandler: function () {
            d.mediaComment.upload_delegate.uploadErrorHandler("audio")
        }
    }, d.mediaComment.video_delegate = {
        readyWatcher: null,
        expectReady: function () {
            if (d.mediaComment.video_delegate.readyWatcher) return;
            d.mediaComment.video_delegate.readyWatcher = setTimeout(d.mediaComment.upload_delegate.setupErrorHandler, 2e3)
        },
        readyHandler: function () {
            try {
                d("#video_upload")[0].setMediaType("video")
            } catch (a) {
                d.mediaComment.upload_delegate.setupErrorHandler()
            }
            clearTimeout(d.mediaComment.video_delegate.readyWatcher), d.mediaComment.video_delegate.readyWatcher = !0
        },
        selectHandler: function () {
            d.mediaComment.upload_delegate.selectHandler("video")
        },
        singleUploadCompleteHandler: function (a) {
            d.mediaComment.upload_delegate.singleUploadCompleteHandler("video", a)
        },
        allUploadsCompleteHandler: function () {
            d.mediaComment.upload_delegate.allUploadsCompleteHandler("video")
        },
        entriesAddedHandler: function (a) {
            d.mediaComment.upload_delegate.entriesAddedHandler("video", a)
        },
        progressHandler: function (a) {
            d.mediaComment.upload_delegate.progressHandler("video", a[0], a[1], a[2])
        },
        uploadErrorHandler: function () {
            d.mediaComment.upload_delegate.uploadErrorHandler("video")
        }
    }, d.mediaComment.upload_delegate = {
        currentType: "audio",
        submit: function () {
            var b = d.mediaComment.upload_delegate.currentType,
                c = d("#" + b + "_upload")[0].getFiles();
            c.length > 1 && d("#" + b + "_upload")[0].removeFiles(0, c.length - 2), c = d("#" + b + "_upload")[0].getFiles();
            if (c.length == 0) return;
            d("#media_upload_progress").css("visibility", "visible").progressbar({
                value: 1
            }), d("#media_upload_submit").attr("disabled", !0).text(a.t("messages.submitting", "Submitting Media File...")), d("#" + b + "_upload")[0].upload()
        },
        selectHandler: function (b) {
            d.mediaComment.upload_delegate.currentType = b;
            try {
                var c = d("#" + b + "_upload")[0].getFiles()
            } catch (e) {
                d.mediaComment.upload_delegate.setupErrorHandler();
                return
            }
            c.length > 1 && d("#" + b + "_upload")[0].removeFiles(0, c.length - 2);
            var f = d("#" + b + "_upload")[0].getFiles()[0];
            d("#media_upload_settings .icon").attr("src", "/images/file-" + b + ".png"), d("#media_upload_submit").show(), d("#media_upload_submit").attr("disabled", f ? !1 : !0), d("#media_upload_settings").css("visibility", f ? "visible" : "hidden"), d("#media_upload_title").val(f.title), d("#media_upload_display_title").text(f.title), d("#media_upload_file_size").text(d.fileSize(f.bytesTotal)), d("#media_upload_feedback_text").html(""), d("#media_upload_feedback").css("visibility", "hidden");
            if (f.bytesTotal > INST.kalturaSettings.max_file_size_bytes) {
                d("#media_upload_feedback_text").html(a.t("errors.file_too_large", "*This file is too large.* The maximum size is %{size}MB.", {
                    size: INST.kalturaSettings.max_file_size_bytes / 1048576,
                    wrapper: "<b>$1</b>"
                })), d("#media_upload_feedback").css("visibility", "visible"), d("#media_upload_submit").hide();
                return
            }
            d("#media_upload_submit").click()
        },
        singleUploadCompleteHandler: function (a, b) {
            d("#media_upload_progress").progressbar("option", "value", 100)
        },
        allUploadsCompleteHandler: function (a) {
            d("#media_upload_progress").progressbar("option", "value", 100), d("#" + a + "_upload")[0].addEntries()
        },
        entriesAddedHandler: function (b, c) {
            d("#media_upload_progress").progressbar("option", "value", 100);
            var e = c[0];
            d("#media_upload_submit").text(a.t("messages.submitted", "Submitted Media File!")), setTimeout(function () {
                d("#media_comment_dialog").dialog("close")
            }, 1500), b == "audio" ? e.entryType = 5 : b == "video" && (e.entryType = 1), d.mediaComment.entryAdded(e.entryId, e.entryType, e.title)
        },
        progressHandler: function (a, b, c, e) {
            var f = 100 * b / c;
            d("#media_upload_progress").progressbar("option", "value", f)
        },
        uploadErrorHandler: function (b) {
            var c = d("#" + b + "_upload")[0].getError();
            d("#media_upload_errors").text(a.t("errors.upload_failed", "Upload failed with error:") + " " + c), d("#media_upload_progress").hide()
        },
        setupErrorHandler: function () {
            d("#media_upload_feedback_text").html(a.t("errors.media_comment_installation_broken", "Media comment uploading has not been set up properly. Please contact your administrator.")), d("#media_upload_feedback").css("visibility", "visible"), d("#audio_upload_holder").css("visibility", "hidden"), d("#video_upload_holder").css("visibility", "hidden")
        }
    };
    var i = !1,
        j = null;
    d.mediaComment.init = function (b, c) {
        j = j || new Date, b = b || "any", c = c || {};
        var e = d.trim(d("#identity .user_name").text() || "");
        e && (e = e + ": " + (new Date).toString("ddd MMM d, yyyy"));
        var f = c.defaultTitle || e || a.t("titles.media_contribution", "Media Contribution"),
            g = function () {
                d("#video_record_title,#audio_record_title").val(f), k.dialog({
                    title: a.t("titles.record_upload_media_comment", "Record/Upload Media Comment"),
                    width: 560,
                    height: 475,
                    modal: !1
                }), k.dialog("option", "close", function () {
                    d("#audio_record").before("<div id='audio_record'/>").remove(), d("#video_record").before("<div id='video_record'/>").remove(), c && c.close && d.isFunction(c.close) && c.close.call(k)
                }), d("#audio_record").before("<div id='audio_record'/>").remove(), d("#video_record").before("<div id='video_record'/>").remove();
                var e = k.data("ks");
                b == "video" ? (d("#video_record_option").click(), d("#media_record_option_holder").hide(), d("#audio_upload_holder").hide(), d("#video_upload_holder").show()) : b == "audio" ? (d("#audio_record_option").click(), d("#media_record_option_holder").hide(), d("#audio_upload_holder").show(), d("#video_upload_holder").hide()) : (d("#video_record_option").click(), d("#audio_upload_holder").show(), d("#video_upload_holder").show()), d(document).triggerHandler("reset_media_comment_forms");
                var g = d.trim(d("#identity .user_name").text()) + " " + (new Date).toISOString();
                setTimeout(function () {
                    var b = {
                        host: location.protocol + "//" + INST.kalturaSettings.domain,
                        rtmpHost: "rtmp://" + (INST.kalturaSettings.rtmp_domain || INST.kalturaSettings.domain),
                        kshowId: "-1",
                        pid: INST.kalturaSettings.partner_id,
                        subpid: INST.kalturaSettings.subpartner_id,
                        uid: k.data("uid") || "ANONYMOUS",
                        ks: e,
                        themeUrl: "/media_record/skin.swf",
                        localeUrl: "/media_record/locale.xml",
                        thumbOffset: "1",
                        licenseType: "CC-0.1",
                        showUi: "true",
                        useCamera: "0",
                        maxFileSize: INST.kalturaSettings.max_file_size_bytes / 1048576,
                        maxUploads: 1,
                        partnerData: d.mediaComment.partnerData(),
                        partner_data: d.mediaComment.partnerData(),
                        entryName: g
                    };
                    INST.kalturaSettings.do_flash_var_test && (b.host = INST.kalturaSettings.domain, delete b.subpid, delete b.uid, b.maxUploads = 5, b.detectionDelay = 500, b.timePerMic = 5e3);
                    var c = {
                        align: "middle",
                        quality: "high",
                        bgcolor: "#ffffff",
                        name: "KRecordAudio",
                        allowScriptAccess: "sameDomain",
                        type: "application/x-shockwave-flash",
                        pluginspage: "http://www.adobe.com/go/getflashplayer",
                        wmode: "opaque"
                    };
                    d("#audio_record").text(a.t("messages.flash_required_record_audio", "Flash required for recording audio.")), swfobject.embedSWF("/media_record/KRecord.swf", "audio_record", "400", "300", "9.0.0", !1, b, c);
                    var c = d.extend({}, c, {
                        name: "KRecordVideo"
                    }),
                        b = d.extend({}, b, {
                            useCamera: "1"
                        });
                    d("#video_record").html("Flash required for recording video."), swfobject.embedSWF("/media_record/KRecord.swf", "video_record", "400", "300", "9.0.0", !1, b, c)
                }, INST.browser.ie ? 500 : 10);
                var h = {
                    host: location.protocol + "//" + INST.kalturaSettings.domain,
                    partnerId: INST.kalturaSettings.partner_id,
                    subPId: INST.kalturaSettings.subpartner_id,
                    uid: k.data("uid") || "ANONYMOUS",
                    entryId: "-1",
                    ks: e,
                    thumbOffset: "1",
                    licenseType: "CC-0.1",
                    maxFileSize: INST.kalturaSettings.max_file_size_bytes / 1048576,
                    maxUploads: 1,
                    partnerData: d.mediaComment.partnerData(),
                    partner_data: d.mediaComment.partnerData(),
                    uiConfId: INST.kalturaSettings.upload_ui_conf,
                    jsDelegate: "$.mediaComment.audio_delegate"
                };
                INST.kalturaSettings.do_flash_var_test && (delete h.uid, h.maxUploads = 5);
                var j = {
                    align: "middle",
                    quality: "high",
                    bgcolor: "#ffffff",
                    name: "KUpload",
                    allowScriptAccess: "always",
                    type: "application/x-shockwave-flash",
                    pluginspage: "http://www.adobe.com/go/getflashplayer",
                    wmode: "transparent"
                };
                d("#audio_upload").text(a.t("messages.flash_required_upload_audio", "Flash required for uploading audio."));
                var l = "180",
                    m = "50";
                swfobject.embedSWF("//" + INST.kalturaSettings.domain + "/kupload/ui_conf_id/" + INST.kalturaSettings.upload_ui_conf, "audio_upload", l, m, "9.0.0", !1, h, j), h = d.extend({}, h, {
                    jsDelegate: "$.mediaComment.video_delegate"
                }), d("#video_upload").text(a.t("messages.flash_required_upload_video", "Flash required for uploading video."));
                var l = "180",
                    m = "50";
                swfobject.embedSWF("//" + INST.kalturaSettings.domain + "/kupload/ui_conf_id/" + INST.kalturaSettings.upload_ui_conf, "video_upload", l, m, "9.0.0", !1, h, j);
                var n, o, p, q, r, s, t, u, v, w, x, y = !1;
                i = !0, setInterval(function () {
                    i && (n = d("#audio_record_holder"), o = d("#audio_record"), p = d("#audio_record_meter"), q = 0, r = 0, t = d("#video_record_holder"), u = d("#video_record"), v = d("#video_record_meter"), w = 0, x = 0, i = !1), q++, w++;
                    var a = null,
                        b = null;
                    o && o[0] && o[0].getMicophoneActivityLevel && o.parent().length ? a = o[0].getMicophoneActivityLevel() : o = d("#audio_record"), u && u[0] && u[0].getMicophoneActivityLevel && u.parent().length ? b = u[0].getMicophoneActivityLevel() : u = d("#video_record");
                    if (a != null) {
                        a = Math.max(a, r), a > -1 && !n.hasClass("with_volume") && (p.css("display", "none"), d("#audio_record_holder").addClass("with_volume").animate({
                            width: 420
                        }, function () {
                            p.css("display", "")
                        }));
                        if (q > 4) {
                            r = 0, q = 0;
                            var c = (a - a % 10) / 10;
                            p.attr("class", "volume_meter band_" + c)
                        } else r = a
                    }
                    if (b != null) {
                        b = Math.max(b, x), b > -1 && !t.hasClass("with_volume") && (v.css("display", "none"), d("#video_record_holder").addClass("with_volume").animate({
                            width: 420
                        }, function () {
                            v.css("display", "")
                        }));
                        if (w > 4) {
                            x = 0, w = 0;
                            var c = (b - b % 10) / 10;
                            v.attr("class", "volume_meter band_" + c)
                        } else x = b
                    }
                }, 20)
            },
            h = new Date;
        h - j > 3e5 && d("#media_comment_dialog").dialog("close").remove(), j = h;
        var k = d("#media_comment_dialog");
        if (k.length == 0) {
            var l = d("<div/>").attr("id", "media_comment_dialog");
            l.text(a.t("messages.loading", "Loading...")), l.dialog({
                title: a.t("titles.record_upload_media_comment", "Record/Upload Media Comment"),
                resizable: !1,
                width: 470,
                height: 300,
                modal: !1
            }), d.ajaxJSON("/api/v1/services/kaltura_session", "POST", {}, function (a) {
                l.data("ks", a.ks), INST.kalturaSettings.do_flash_var_test || l.data("uid", a.uid)
            }, function (b) {
                b.logged_in == 0 ? l.data("ks-error", a.t("errors.must_be_logged_in", "You must be logged in to record media.")) : l.data("ks-error", a.t("errors.load_failed", "Media Comment Application failed to load.  Please try again."))
            }), d.get("/partials/_media_comments.html", function (a) {
                var b = function () {
                        l.data("ks") ? (l.html(a), l.find("#media_record_tabs").tabs({
                            activate: d.mediaComment.video_delegate.expectReady
                        }), g()) : l.data("ks-error") ? l.html(l.data("ks-error")) : setTimeout(b, 500)
                    };
                b(), k = d("#media_comment_dialog")
            }), k = l
        } else g()
    }, d(document).ready(function () {
        d(document).bind("reset_media_comment_forms", function () {
            d("#audio_record_holder_message,#video_record_holder_message").removeClass("saving").find(".recorder_message").html("Saving Recording...<img src='/images/media-saving.gif'/>"), d("#audio_record_holder").stop(!0, !0).clearQueue().css("width", "").removeClass("with_volume"), d("#video_record_holder").stop(!0, !0).clearQueue().css("width", "").removeClass("with_volume"), d("#media_upload_submit").text(a.t("buttons.submit", "Submit Media File")).attr("disabled", !0), d("#media_upload_settings").css("visibility", "hidden"), d("#media_upload_progress").css("visibility", "hidden").progressbar().progressbar("option", "value", 1), d("#media_upload_title").val("");
            var b = d("#audio_upload")[0] && d("#audio_upload")[0].getFiles && d("#audio_upload")[0].getFiles();
            b && d("#audio_upload")[0].removeFiles && b.length > 0 && d("#audio_upload")[0].removeFiles(0, b.length - 1), b = d("#video_upload")[0] && d("#video_upload")[0].getFiles && d("#video_upload")[0].getFiles(), b && d("#video_upload")[0].removeFiles && b.length > 0 && d("#video_upload")[0].removeFiles(0, b.length - 1)
        }), d("#media_upload_submit").live("click", function (a) {
            d.mediaComment.upload_delegate.submit()
        }), d("#video_record_option,#audio_record_option").live("click", function (a) {
            a.preventDefault(), d("#video_record_option,#audio_record_option").removeClass("selected_option"), d(this).addClass("selected_option"), d("#audio_record_holder").stop(!0, !0).clearQueue().css("width", "").removeClass("with_volume"), d("#video_record_holder").stop(!0, !0).clearQueue().css("width", "").removeClass("with_volume"), d(this).attr("id") == "audio_record_option" ? (d("#video_record_holder_holder").hide(), d("#audio_record_holder_holder").show()) : (d("#video_record_holder_holder").show(), d("#audio_record_holder_holder").hide())
        })
    }), d(document).bind("media_recording_error", function () {
        d("#audio_record_holder_message,#video_record_holder_message").find(".recorder_message").html(e(a.t("errors.save_failed", "Saving appears to have failed.  Please close this popup to try again.")) + "<div style='font-size: 0.8em; margin-top: 20px;'>" + e(a.t("errors.persistent_problem", "If this problem keeps happening, you may want to try recording your media locally and then uploading the saved file instead.")) + "</div>")
    }), window.mediaCommentCallback = function (a) {
        b.each(a, g), d("#media_comment_create_dialog").empty().dialog("close")
    }, window.beforeAddEntry = function () {
        var a = Math.random();
        d.mediaComment.lastAddAttemptId = a, setTimeout(function () {
            d.mediaComment.lastAddAttemptId == a && d(document).triggerHandler("media_recording_error")
        }, 3e4), d("#audio_record_holder_message,#video_record_holder_message").addClass("saving")
    }, window.addEntryFail = function () {
        d(document).triggerHandler("media_recording_error")
    }, window.addEntryFailed = function () {
        d(document).triggerHandler("media_recording_error")
    }, window.addEntryComplete = function (b) {
        d.mediaComment.lastAddAttemptId = null, d("#audio_record_holder_message,#video_record_holder_message").removeClass("saving");
        try {
            var c = null;
            d.isArray(b) || (b = [b]);
            for (var e = 0; e < b.length; e++) {
                var f = b[e];
                d("#media_record_tabs").tabs("option", "selected") == 0 ? c = d("#video_record_title,#audio_record_title").filter(":visible:first").val() : d("#media_record_tabs").tabs("option", "selected") != 1, f.entryType == 1 && d("#audio_record_option").hasClass("selected_option") && (f.entryType = 5), d.mediaComment.entryAdded(f.entryId, f.entryType, f.entryName, c), d("#media_comment_dialog").dialog("close")
            }
        } catch (g) {
            console.log(g), alert(a.t("errors.save_failed_try_again", "Entry failed to save.  Please try again."))
        }
    }
}), define("wikiSidebar", ["i18n!wiki.sidebar", "jquery", "str/htmlEscape", "jquery.ajaxJSON", "jquery.inst_tree", "jquery.instructure_forms", "jqueryui/dialog", "jquery.instructure_misc_helpers", "jquery.instructure_misc_plugins", "compiled/jquery.rails_flash_notifications", "jquery.templateData", "tinymce.editor_box", "vendor/jquery.pageless", "jqueryui/accordion", "jqueryui/tabs", "vendor/scribd.view"], function (a, b, c) {
    var d, e, f, g, h, i, j, k = 0;
    b(function () {
        d = b("#editor_tabs"), e = d.find("ul#tree1"), f = d.find("#editor_tabs_4 .image_list"), g = b("#course_show_secondary"), h = b("form#sidebar_upload_image_form"), i = b("form#sidebar_upload_file_form"), j = b("#wiki_sidebar_select_folder_dialog")
    });
    var l = {
        generateTreeItemID: function (a) {
            var b = a + "_" + k;
            return k++, b
        },
        itemSelected: function (b) {
            switch (b.item_type) {
            case "image":
                l.editor.editorBox("insert_code", '<img alt="' + b.title + '" src="' + b.link_url + '"/>');
                break;
            default:
                l.editor.editorBox("create_link", {
                    title: b.title || a.t("no_title", "No title"),
                    url: b.link_url
                })
            }
        },
        fileSelected: function (a) {
            var b = a.find("span.text"),
                c = b.attr("rel"),
                d = b.clone();
            d.find(".screenreader-only").remove(), d = d.text(), l.editor.editorBox("create_link", {
                title: d,
                url: c,
                file: !0,
                image: a.hasClass("image"),
                scribdable: a.hasClass("scribdable"),
                kaltura_entry_id: a.attr("data-media-entry-id"),
                kaltura_media_type: a.hasClass("video_playback") ? "video" : "audio"
            })
        },
        imageSelected: function (a) {
            var b = a.data("url") || a.attr("src"),
                c = a.attr("alt");
            l.editor.editorBox("insert_code", '<img alt="' + c + '" src="' + b + '"/>')
        },
        fileAdded: function (g, h, i) {
            var j, k, l, m;
            b.isFunction(h) ? (k = !0, l = h) : typeof h == "object" ? j = h : k = h, j == null && (j = e.find(".initialized.folder_" + g.folder_id + ">ul"));
            if (j.length || i) {
                var n = g,
                    o = "<span class='screenreader-only'>" + c(n.display_name) + " " + a.t("aria_tree.file", "file") + "</span>" + c(n.display_name);
                m = e.find(".file_blank").clone(!0), m.attr("class", "file").attr("title", n.display_name).attr("data-tooltip", "").attr("aria-level", j.data("level")).attr("id", this.generateTreeItemID("file")).addClass(n.mime_class).toggleClass("scribdable", n["scribdable?"]), n.media_entry_id && m.addClass("kalturable").attr("data-media-entry-id", n.media_entry_id).addClass(n.content_type && n.content_type.match(/video/) ? "video_playback" : "audio_playback"), n.name = o, m.fillTemplateData({
                    data: n,
                    hrefValues: ["id"],
                    htmlValues: ["name"]
                }), j && (j.append(m), m.show(), e.instTree.InitInstTree(e)), i && i(m)
            }
            if (k && (g.mime_class == "image" || g.content_type.match(/^image/)) && f.hasClass("initialized")) {
                var p = b.replaceTags(b("#editor_tabs_4 .file_url").attr("href"), "id", g.id),
                    q = d.find("#wiki_sidebar_image_uploads .img_link").clone();
                q.find(".img").attr({
                    src: g.thumbnail_url || p,
                    alt: g.display_name
                }).data("url", p).end().fillTemplateData({
                    data: g
                }).prependTo(f), l ? q.slideDown(l) : q.slideDown()
            }
        },
        show: function () {
            d.addClass("showing"), d.show(), g.hide()
        },
        hide: function () {
            d.removeClass("showing").hide(), g.show()
        },
        toggle: function () {
            d.hasClass("showing") ? l.hide() : l.show()
        },
        loadFolder: function (d) {
            d.data("includes_files", !0);
            var f = b.replaceTags(b("#editor_tabs_3 #folder_url").attr("href"), "id", d.data("id"));
            $loading = e.find(">.loading").clone(), $loading.show(), d.append($loading), b.ajaxJSON(f, "GET", {}, function (b) {
                $loading.remove();
                var f = d.find("ul");
                f.data("level", f.parents("ul:first").data("level") + 1);
                for (var g in b.sub_folders) {
                    var h = b.sub_folders[g].folder,
                        i = e.find(".folder_blank").clone(!0);
                    i.attr("class", "folder").data("id", h.id).addClass("folder_" + h.id), i.find(".name").html(" <span class='screenreader-only'>" + c(h.name) + " " + a.t("aria_tree.folder", "folder") + "</span>" + c(h.name)), i.attr("aria-level", f.data("level")).attr("id", l.generateTreeItemID("folder")), f.append(i), i.show()
                }
                for (var g in b.files) l.fileAdded(b.files[g].attachment, f);
                d.addClass("initialized"), e.instTree.InitInstTree(e)
            }, function () {
                $loading.remove()
            })
        },
        addFolder: function (a, d, e) {
            var f = a[d];
            if (e != 0) {
                var g = c(f.name);
                g = "- " + g, g.length + e + 1 > 38 && (g = g.substring(0, 35) + "...");
                for (var k = 0; k < e; k++) g = "&nbsp;&nbsp;" + g;
                var m = b("<option />");
                m.val(f.id), m.html(g), i.find("#attachment_folder_id").append(m.clone()), h.find("#image_folder_id").append(m.clone()), j.find(".folder_id").append(m.clone())
            }
            for (var k in f.sub_folders) l.addFolder(a, f.sub_folders[k], e + 1)
        },
        loadFolders: function () {
            if (!i.hasClass("initialized")) {
                i.addClass("initialized");
                var a = i.find(".json_upload_url").attr("href");
                b.ajaxJSON(a, "GET", {}, function (a) {
                    var b = {},
                        c;
                    for (var d in a.folders) {
                        var e = a.folders[d].folder;
                        b[e.id] || (b[e.id] = e);
                        if (!e.parent_folder_id) {
                            c = e.id;
                            continue
                        }
                        b[e.parent_folder_id] || (b[e.parent_folder_id] = {}), b[e.parent_folder_id].sub_folders || (b[e.parent_folder_id].sub_folders = []), b[e.parent_folder_id].sub_folders.push(e.id)
                    }
                    l.addFolder(b, c, 0)
                })
            }
        },
        init: function () {
            l.inited = !0, d.find("#pages_accordion a.add").click(function (a) {
                a.preventDefault(), d.find("#new_page_drop_down").slideToggle("fast", function () {
                    b(this).find(":text:visible:first").focus().select()
                })
            }), d.find(".upload_new_image_link").click(function (c) {
                c.preventDefault(), l.loadFolders(), h.slideToggle("fast", function () {
                    var d = b("#sidebar_upload_image_form");
                    d.is(":visible") ? (d.find("select").first().focus(), b(c.currentTarget).attr("aria-label", a.t("image_form.expanded", "Click to toggle the new image form (expanded)"))) : b(c.currentTarget).attr("aria-label", a.t("image_form.collapsed", "Click to toggle the new image form (collapsed)"))
                })
            }), d.find(".find_new_image_link").click(function (a) {
                a.preventDefault(), l.editor.editorBox("execute", "instructureEmbed", "flickr")
            }), d.find(".upload_new_file_link").click(function (a) {
                a.preventDefault(), l.loadFolders(), i.slideToggle("fast")
            }), d.bind("tabsshow tagselect", function (b, c) {
                c.panel.id === "editor_tabs_3" && !e.hasClass("initialized") && (e.addClass("initialized unstyled_list"), e.instTree({
                    multi: !1,
                    dragdrop: !1,
                    onExpand: function (a) {
                        a.hasClass("folder") && !a.data("includes_files") && l.loadFolder(a)
                    },
                    onClick: function (a, b) {
                        b.hasClass("leaf") || b.hasClass("file") ? l.fileSelected(b) : b.hasClass("node") && b.children(".sign").click()
                    },
                    onEnter: function (a, b) {
                        b.hasClass("leaf") || b.hasClass("file") ? l.fileSelected(b) : b.hasClass("node") && b.children(".sign").click()
                    }
                }), $node = e.find(".folder").first(), e.attr("aria-activedescendant", $node.attr("id")), e.find('[aria-selected="true"]').attr("aria-selected", "false"), $node.attr("aria-selected", "true")), c.panel.id === "editor_tabs_4" && !f.hasClass("initialized") && (f.addClass("initialized"), f.pageless({
                    container: f,
                    currentPage: 0,
                    totalPages: 1,
                    distance: 500,
                    url: f.data("url"),
                    loaderMsg: a.t("loading_more_results", "Loading more results"),
                    scrape: function (a, b) {
                        return this.totalPages = parseInt(b.getResponseHeader("X-Total-Pages")), a
                    }
                }))
            }), d.tabs(), b(".wiki_pages li a").live("click", function (a) {
                a.preventDefault(), l.editor.editorBox("create_link", {
                    title: b(this).text(),
                    url: b(this).attr("href")
                })
            }), d.find("#pages_accordion").accordion({
                header: ".header",
                autoHeight: !1,
                heightStyle: "content"
            }), b("#new_page_drop_down").submit(function (a) {
                a.preventDefault();
                var c = b.trim(b("#new_page_name").val()).replace(/\s/g, "-").toLowerCase();
                l.editor.editorBox("create_link", {
                    title: b("#new_page_name").val(),
                    url: b("#new_page_url_prefix").val() + "/" + c
                }), b("#new_page_drop_down").slideUp("fast"), b("#new_page_name").val("")
            }), f.delegate(".img_link", "click", function (a) {
                a.preventDefault(), l.imageSelected(b(this).find(".img"))
            }), b.handlesHTML5Files && (b("#editor_tabs_3 .file_list_holder").bind("dragenter dragover", function (a) {
                if (!b(this).hasClass("file_drop")) return;
                a.preventDefault(), a.stopPropagation(), b(this).addClass("file_drag")
            }, !1).bind("dragleave dragout", function (a) {
                if (!b(this).hasClass("file_drop")) return;
                b(this).closest(".file_list_holder") || b(this).removeClass("file_drag")
            }, !1).bind("drop", function (c) {
                if (!b(this).hasClass("file_drop")) return;
                c.preventDefault(), c.stopPropagation(), b(this).removeClass("file_drag");
                var d = [],
                    e = c.originalEvent.dataTransfer,
                    f = e.files;
                for (var g = 0; g < f.length; g++) f[g] && d.push(f[g]);
                if (d.length === 0) {
                    alert(a.t("errors.no_valid_files_selected", "No valid files were selected"));
                    return
                }
                var h = function (a) {
                        b("#wiki_sidebar_file_uploads").triggerHandler("files_added", {
                            files: d,
                            folder_id: a
                        })
                    };
                return j.data("folder_select", h), j.find(".file_count").text(d.length), j.find(".folder_id").empty(), l.loadFolders(), j.dialog({
                    title: a.t("titles.select_folder_for_uploads", "Select folder for file uploads")
                }), !1
            }, !1), j.find(".select_button").click(function (a) {
                var b = j.find(".folder_id").val();
                if (b) {
                    var c = j.data("folder_select");
                    c && c(b), j.dialog("close")
                }
            }), j.find(".cancel_button").click(function (a) {
                j.data("folder_select", null), j.dialog("close")
            }), b("#editor_tabs_4 .image_list_holder").bind("dragenter dragover", function (a) {
                if (!b(this).hasClass("file_drop")) return;
                a.preventDefault(), a.stopPropagation(), b(this).addClass("file_drag")
            }, !1).bind("dragleave dragout", function (a) {
                if (!b(this).hasClass("file_drop")) return;
                b(this).parents(".image_list_holder").length || b(this).removeClass("file_drag")
            }, !1).bind("drop", function (c) {
                if (!b(this).hasClass("file_drop")) return;
                c.preventDefault(), c.stopPropagation(), b(this).removeClass("file_drag");
                var d = [],
                    e = c.originalEvent.dataTransfer,
                    f = e.files;
                for (var g = 0; g < f.length; g++) f[g] && (!f[g].type || f[g].type.match(/^image/)) && d.push(f[g]);
                if (d.length === 0) {
                    alert(a.t("errors.no_valid_image_files_selected", "No valid image files were selected"));
                    return
                }
                var h = function (a) {
                        b("#wiki_sidebar_image_uploads").triggerHandler("files_added", {
                            files: d,
                            folder_id: a
                        })
                    };
                return j.data("folder_select", h), j.find(".file_count").text(d.length), j.find(".folder_id").empty(), l.loadFolders(), j.dialog({
                    title: a.t("titles.select_folder_for_uploads", "Select folder for file uploads")
                }), !1
            }, !1));
            var c = [],
                g = !0;
            b("#wiki_sidebar_file_uploads").bind("files_added", function (a, d) {
                for (var e in d.files) c.push({
                    file: d.files[e],
                    folder_id: d.folder_id
                });
                b(this).triggerHandler("file_list_update")
            }).bind("file_list_update", function (a) {
                c.length === 0 ? b(this).slideUp() : (b(this).triggerHandler("file_upload_check"), b(this).slideDown())
            }).bind("file_upload_check", function (d) {
                var e = b(this);
                if (g) {
                    var f = c.shift(),
                        h = b.fileData(f.file);
                    e.fillTemplateData({
                        data: {
                            filename: h.name,
                            files_remaining: c.length
                        }
                    }), g = !1, b.ajaxFileUpload({
                        url: i.attr("action"),
                        data: {
                            "attachment[uploaded_data]": f.file,
                            "attachment[display_name]": h.name,
                            "attachment[folder_id]": f.folder_id
                        },
                        method: "POST",
                        success: function (a) {
                            l.fileAdded(a.attachment, !0), g = !0, e.triggerHandler("file_list_update")
                        },
                        progress: function (a) {
                            console.log("progress!")
                        },
                        error: function (c) {
                            b.flashError(a.t("errors.unexpected_upload_problem", "Unexpected problem uploading %{filename}.  Please try again.", {
                                filename: h.name
                            })), e.triggerHandler("file_list_update"), g = !0
                        }
                    }), c.length === 0 && e.find(".remaining").slideUp()
                } else e.fillTemplateData({
                    data: {
                        files_remaining: c.length
                    }
                })
            });
            var k = [],
                m = !0;
            b("#wiki_sidebar_image_uploads").bind("files_added", function (a, c) {
                for (var d in c.files) k.push({
                    file: c.files[d],
                    folder_id: c.folder_id
                });
                b(this).triggerHandler("file_list_update")
            }).bind("file_list_update", function (a) {
                k.length ? (b(this).triggerHandler("file_upload_check"), b(this).slideDown()) : b(this).slideUp()
            }).bind("file_upload_check", function (c) {
                var d = b(this);
                if (m) {
                    var e = k.shift(),
                        f = b.fileData(e.file);
                    d.fillTemplateData({
                        data: {
                            filename: f.name,
                            files_remaining: k.length
                        }
                    }), m = !1, b.ajaxFileUpload({
                        url: h.attr("action"),
                        data: {
                            "attachment[uploaded_data]": e.file,
                            "attachment[display_name]": f.name,
                            "attachment[folder_id]": e.folder_id
                        },
                        method: "POST",
                        success: function (a) {
                            l.fileAdded(a.attachment, !0), m = !0, d.triggerHandler("file_list_update")
                        },
                        progress: function (a) {
                            console.log("progress!")
                        },
                        error: function (c) {
                            b.flashError(a.t("errors.unexpected_upload_problem", "Unexpected problem uploading %{filename}.  Please try again.", {
                                filename: f.name
                            })), d.triggerHandler("file_list_update"), m = !0
                        }
                    }), k.length === 0 && d.find(".remaining").slideUp()
                } else d.fillTemplateData({
                    data: {
                        files_remaining: k.length
                    }
                })
            }), h.formSubmit({
                fileUpload: !0,
                preparedFileUpload: !0,
                singleFile: !0,
                context_code: b("#editor_tabs .context_code").text(),
                folder_id: function () {
                    return b(this).find("[name='attachment[folder_id]']").val()
                },
                upload_only: !0,
                object_name: "attachment",
                processData: function (a) {
                    return a["attachment[display_name]"] = b(this).find(".file_name").val(), a
                },
                beforeSubmit: function (a) {
                    h.find(".uploading").slideDown(), h.attr("action", h.find(".json_upload_url").attr("href"))
                },
                success: function (a) {
                    h.slideUp(function () {
                        h.find(".uploading").hide()
                    }), l.fileAdded(a.attachment, function () {
                        l.imageSelected(b(this).find(".img"))
                    })
                },
                error: function (a) {
                    h.find(".uploading").slideUp()
                }
            }), i.formSubmit({
                fileUpload: !0,
                preparedFileUpload: !0,
                singleFile: !0,
                object_name: "attachment",
                context_code: b("#editor_tabs .context_code").text(),
                folder_id: function () {
                    return b(this).find("[name='attachment[folder_id]']").val()
                },
                upload_only: !0,
                processData: function (a) {
                    return a["attachment[display_name]"] = i.find(".file_name").val(), a
                },
                beforeSubmit: function (c) {
                    i.find(".uploading").slideDown(), i.attr("action", i.find(".json_upload_url").attr("href")), b(this).find("button").attr("disabled", !0).text(a.t("buttons.uploading", "Uploading..."))
                },
                success: function (a) {
                    b(this).find("button").attr("disabled", !1).text("Upload"), i.slideUp(function () {
                        i.find(".uploading").hide()
                    }), l.fileAdded(a.attachment, !0, function (a) {
                        l.fileSelected(a)
                    })
                },
                error: function (c) {
                    b(this).find("button").attr("disabled", !1).text(a.t("errors.upload_failed", "Upload Failed, please try again")), i.find(".uploading").slideUp()
                }
            })
        },
        attachToEditor: function (a) {
            return l.editor = b(a), l
        }
    };
    return l
}), define("instructure", ["compiled/views/KeyboardNavDialog", "INST", "i18n!instructure", "jquery", "underscore", "compiled/userSettings", "str/htmlEscape", "wikiSidebar", "instructure_helper", "jqueryui/draggable", "jquery.ajaxJSON", "jquery.doc_previews", "jquery.dropdownList", "jquery.google-analytics", "jquery.instructure_date_and_time", "jquery.instructure_forms", "jqueryui/dialog", "jquery.instructure_misc_helpers", "jquery.instructure_misc_plugins", "jquery.keycodes", "jquery.loadingImg", "compiled/jquery.rails_flash_notifications", "jquery.templateData", "compiled/jquery/fixDialogButtons", "compiled/jquery/mediaCommentThumbnail", "tinymce.editor_box", "vendor/date", "vendor/jquery.ba-tinypubsub", "jqueryui/accordion", "jqueryui/resizable", "jqueryui/sortable", "jqueryui/tabs", "compiled/behaviors/trackEvent", "compiled/badge_counts", "vendor/scribd.view", "vendor/jquery.placeholder"], function (a, b, c, d, e, f, g, h) {
    d.trackEvent("Route", location.pathname.replace(/\/$/, "").replace(/\d+/g, "--") || "/");
    var i = function (a) {
            ENV.AUTHENTICITY_TOKEN && a.setRequestHeader("X-CSRF-Token", ENV.AUTHENTICITY_TOKEN)
        };
    d.ajaxPrefilter("json", function (a, b, c) {
        a.accepts.json ? a.accepts.json = a.accepts.json + ", application/json+canvas-string-ids" : a.accepts.json = "application/json+canvas-string-ids"
    }), d.ajaxPrefilter(function (a, b, c) {
        a.crossDomain || i(c);
        var e = a.url,
            f = (new Date).getTime();
        c.done(function (a, b, c) {
            var g = (new Date).getTime() - f;
            if (g > 1e3) {
                var h = '{"requestingPage": "' + window.location + '," "status": "' + b + '", "X-Request-Context-Id" : "' + c.getResponseHeader("X-Request-Context-Id") + '", "X-Runtime": ' + c.getResponseHeader("X-Runtime") + "}";
                d.trackEvent("XHRs", e, h, g)
            }
        })
    }), d(function () {
        function l() {
            window.clearTimeout(k), j.find(".menu-item").removeClass("hover hover-pending")
        }
        function m() {
            i.filter(".hover-pending").removeClass("hover-pending"), k = window.setTimeout(l, 400)
        }
        function n(a) {
            var b = i.filter(".hover").length > 0;
            l();
            var c = d(this);
            c.addClass("hover-pending"), b && c.addClass("hover"), setTimeout(function () {
                c.hasClass("hover-pending") && c.addClass("hover")
            }, 300), d.publish("menu/hovered", c)
        }
        function r() {
            var a = 500,
                b = o.find("li:visible:first").height() * 1.5;
            p = p || o.find(".ellipsible"), p.css("maxWidth", ""), p.ifExists(function () {
                for (var c = 0; o.height() > b && c < 20; c++) q || (q = !0, p.addClass("ellipsis")), p.css("maxWidth", a -= 20)
            })
        }
        function s() {
            var a = d("#content");
            d(".user_content:not(.enhanced):visible").addClass("unenhanced"), d(".user_content.unenhanced:visible").each(function () {
                var b = d(this);
                b.find("img").css("maxWidth", Math.min(a.width(), b.width())), b.data("unenhanced_content_html", b.html())
            }).find(".enhanceable_content").show().filter(".dialog").each(function () {
                var a = d(this);
                a.hide(), a.closest(".user_content").find("a[href='#" + a.attr("id") + "']").click(function (b) {
                    b.preventDefault(), a.dialog()
                })
            }).end().filter(".draggable").draggable().end().filter(".resizable").resizable().end().filter(".sortable").sortable().end().filter(".accordion").accordion().end().filter(".tabs").each(function () {
                d(this).tabs()
            }).end().end().find("a:not(.not_external, .external):external").each(function () {
                d(this).not(":has(img)").addClass("external").html("<span>" + d(this).html() + "</span>").attr("target", "_blank").attr("aria-label", g(c.t("titles.external_link", "Links to an external site."))).append('<span class="ui-icon ui-icon-extlink ui-icon-inline" title="' + g(c.t("titles.external_link", "Links to an external site.")) + '"/>')
            }).end().find("a.instructure_file_link").each(function () {
                var a = d(this),
                    b = d("<span class='instructure_file_link_holder link_holder'/>");
                a.removeClass("instructure_file_link").before(b).appendTo(b), a.attr("target") != "_blank" && b.append("<a href='" + a.attr("href") + "' target='_blank' title='" + g(c.t("titles.view_in_new_window", "View in a new window")) + "' style='padding-left: 5px;'><img src='/images/popout.png' alt='" + g(c.t("titles.view_in_new_window", "View in a new window")) + "'/></a>")
            }), d.filePreviewsEnabled() && d("a.instructure_scribd_file").not(".inline_disabled").each(function () {
                var a = d(this);
                if (d.trim(a.text())) {
                    var b = d("<span class='instructure_scribd_file_holder link_holder'/>"),
                        e = d("<a class='scribd_file_preview_link' aria-hidden='true' tabindex='-1' href='" + a.attr("href") + "' title='" + g(c.t("titles.preview_document", "Preview the document")) + "' style='padding-left: 5px;'><img src='/images/preview.png' alt='" + g(c.t("titles.preview_document", "Preview the document")) + "'/></a>");
                    a.removeClass("instructure_scribd_file").before(b).appendTo(b), b.append(e), a.hasClass("auto_open") && e.click()
                }
            }), d(".user_content.unenhanced a").find("img.media_comment_thumbnail").each(function () {
                d(this).closest("a").addClass("instructure_inline_media_comment")
            }).end().filter(".instructure_inline_media_comment").removeClass("no-underline").mediaCommentThumbnail("normal").end().filter(".instructure_video_link, .instructure_audio_link").mediaCommentThumbnail("normal", !0).end().not(".youtubed").each(function () {
                var a = d(this),
                    b = a.attr("href"),
                    e = d.youTubeID(b || "");
                if (!a.hasClass("inline_disabled") && e) {
                    var f = d('<a href="' + b + '" class="youtubed"><img src="/images/play_overlay.png" class="media_comment_thumbnail" style="background-image: url(//img.youtube.com/vi/' + e + '/2.jpg)"/></a>').click(function (a) {
                        a.preventDefault();
                        var b = d("<span class='youtube_holder' style='display: block;'><object width='425' height='344'><param name='wmode' value='opaque'></param><param name='movie' value='//www.youtube.com/v/" + e + "&autoplay=1&hl=en_US&fs=1&'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param><embed src='//www.youtube.com/v/" + e + "&autoplay=1&hl=en_US&fs=1&' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='425' height='344' wmode='opaque'></embed></object><br/><a href='#' style='font-size: 0.8em;' class='hide_youtube_embed_link'>" + g(c.t("links.minimize_youtube_video", "Minimize Video")) + "</a></span>");
                        b.find(".hide_youtube_embed_link").click(function (a) {
                            a.preventDefault(), b.remove(), f.show(), d.trackEvent("hide_embedded_content", "hide_you_tube")
                        }), d(this).after(b).hide()
                    });
                    d.trackEvent("show_embedded_content", "show_you_tube"), a.addClass("youtubed").after(f)
                }
            }), d(".user_content.unenhanced").removeClass("unenhanced").addClass("enhanced"), setTimeout(function () {
                d(".user_content form.user_content_post_form:not(.submitted)").submit().addClass("submitted")
            }, 10)
        }
        function w() {
            v = d(".time_ago_date:visible").toArray(), x()
        }
        function x() {
            var a = v.shift();
            if (a) {
                var b = d(a),
                    e = b.data("original_date") || "",
                    f = b.data("parsed_date") || (e ? Date.parse(e.replace(/ (at|by)/, "")) : Date.parse((b.text() || "").replace(/ (at|by)/, "")));
                if (f) {
                    var g = new Date;
                    g.setDate(g.getDate() + 1);
                    if (!e && f > g && f - g > 36e5) {
                        var h = f.getUTCFullYear().toString();
                        f > g && f.getUTCFullYear() == g.getUTCFullYear() && !b.text().match(h) && f.setUTCFullYear(f.getUTCFullYear() - 1)
                    }
                    var i = g.getTimezoneOffset() - u;
                    isNaN(i) && (i = 0);
                    var j = g - f + i * 60 * 1e3;
                    b.data("original_date", f.toString("MMM d, yyyy h:mmtt")), b.data("parsed_date", f);
                    var k = f.toString("MMM d, yyyy") + f.toString(" h:mmtt").toLowerCase(),
                        l = k;
                    if (j < 864e5) if (j < 36e5) if (j < 6e4) l = c.t("#time.less_than_a_minute_ago", "less than a minute ago");
                    else {
                        var m = parseInt(j / 6e4, 10);
                        l = c.t("#time.count_minutes_ago", {
                            one: "1 minute ago",
                            other: "%{count} minutes ago"
                        }, {
                            count: m
                        })
                    } else {
                        var n = parseInt(j / 36e5, 10);
                        l = c.t("#time.count_hours_ago", {
                            one: "1 hour ago",
                            other: "%{count} hours ago"
                        }, {
                            count: n
                        })
                    }
                    b.text(l), b.attr("title", k)
                }
                setTimeout(x, 1)
            } else setTimeout(w, 6e4)
        }
        function A(a) {
            d("#wizard_spacer_box").height(z.height() || 0).showIf(a === "show")
        }
        window._earlyClick && (document.removeEventListener ? document.removeEventListener("click", _earlyClick, !1) : document.detachEvent("onclick", _earlyClick), _earlyClick.clicks && setTimeout(function () {
            d.each(e.uniq(_earlyClick.clicks), function () {
                var a = d.Event("click");
                a.preventDefault(), d(this).trigger(a)
            })
        }, 1)), d("#main:not(.already_sized)").css({
            minHeight: Math.max(d("#left_side").height(), parseInt((d("#main").css("minHeight") || "").replace("px", ""), 10))
        });
        var i = d(".menu-item"),
            j = d("#menu"),
            k;
        j.delegate(".menu-item", "mouseenter focusin", n).delegate(".menu-item", "mouseleave focusout", m), b.browser.ie7 && d(".menu-item-drop").width(function () {
            var a = d(this).find(".menu-item-drop-column");
            return a.length * a.css("width").replace("px", "")
        }), i.live("touchstart", function () {
            if (!d(this).hasClass("hover")) return n.call(this, event)
        }), d(document).bind("touchstart", function (a) {
            d(a.target).closest(".menu-item").length || m()
        });
        var o = d("#breadcrumbs"),
            p, q = !1;
        r(), d(window).resize(r), d("#ajax_authenticity_token").ifExists(function () {
            this.text() && d("input[name='authenticity_token']").val(this.text())
        }), a.prototype.bindOpenKeys.call({
            $el: d("#keyboard_navigation")
        }), d("#switched_role_type").ifExists(function () {
            var a = d(this).attr("class"),
                b = d("<img/>"),
                e = null;
            switch (d(this).data("role")) {
            case "TeacherEnrollment":
                e = c.t("switched_roles_message.teacher", "You have switched roles temporarily for this course, and are now viewing the course as a teacher.  You can restore your role and permissions from the course home page.");
                break;
            case "StudentEnrollment":
                e = c.t("switched_roles_message.student", "You have switched roles temporarily for this course, and are now viewing the course as a student.  You can restore your role and permissions from the course home page.");
                break;
            case "TaEnrollment":
                e = c.t("switched_roles_message.ta", "You have switched roles temporarily for this course, and are now viewing the course as a TA.  You can restore your role and permissions from the course home page.");
                break;
            case "ObserverEnrollment":
                e = c.t("switched_roles_message.observer", "You have switched roles temporarily for this course, and are now viewing the course as an observer.  You can restore your role and permissions from the course home page.");
                break;
            case "DesignerEnrollment":
                e = c.t("switched_roles_message.designer", "You have switched roles temporarily for this course, and are now viewing the course as a designer.  You can restore your role and permissions from the course home page.");
                break;
            default:
                e = c.t("switched_roles_message.student", "You have switched roles temporarily for this course, and are now viewing the course as a student.  You can restore your role and permissions from the course home page.")
            }
            b.attr("src", "/images/warning.png").attr("title", e).css({
                paddingRight: 2,
                width: 12,
                height: 12
            }), d("#crumb_" + a).find("a").prepend(b)
        }), d("a.show_quoted_text_link").live("click", function (a) {
            var b = d(this).parents(".quoted_text_holder").children(".quoted_text");
            b.length > 0 && (a.preventDefault(), b.show(), d(this).hide())
        }), d(".custom_search_results_link").click(function (a) {
            a.preventDefault();
            var b = d("#custom_search_results_dialog");
            b.dialog({
                title: c.t("titles.search_for_open_resources", "Search for Open Resources"),
                width: 600,
                height: 400
            });
            var e = b.data("searchControl");
            e && e.execute(d("title").text())
        }), d("a.equella_content_link").live("click", function (a) {
            a.preventDefault();
            var b = d("#equella_preview_dialog");
            if (!b.length) {
                b = d("<div/>"), b.attr("id", "equella_preview_dialog").hide(), b.html("<h2/><iframe style='background: url(/images/ajax-loader-medium-444.gif) no-repeat left top; width: 800px; height: 350px; border: 0;' src='about:blank' borderstyle='0'/><div style='text-align: right;'><a href='#' class='original_link external external_link' target='_blank'>" + g(c.t("links.view_equella_content_in_new_window", "view the content in a new window")) + "</a>"), b.find("h2").text(d(this).attr("title") || d(this).text() || c.t("titles.equella_content_preview", "Equella Content Preview"));
                var e = b.find("iframe");
                setTimeout(function () {
                    e.css("background", "#fff")
                }, 2500), d("body").append(b), b.dialog({
                    autoOpen: !1,
                    width: "auto",
                    resizable: !1,
                    title: c.t("titles.equella_content_preview", "Equella Content Preview"),
                    close: function () {
                        b.find("iframe").attr("src", "about:blank")
                    }
                })
            }
            b.find(".original_link").attr("href", d(this).attr("href")), b.dialog("close").dialog("open"), b.find("iframe").attr("src", d(this).attr("href"))
        }), d(".dialog_opener[aria-controls]:not(.user_content *)").live("click", function (a) {
            var b = this;
            d("#" + d(this).attr("aria-controls")).ifExists(function (c) {
                a.preventDefault(), c.data("dialog") || (c.dialog(d.extend({
                    autoOpen: !1,
                    modal: !0
                }, d(b).data("dialogOpts"))), c.fixDialogButtons()), c.dialog("open")
            })
        }), d.filePreviewsEnabled() ? d("a.scribd_file_preview_link").live("click", function (a) {
            a.preventDefault();
            var b = d(this).loadingImage({
                image_size: "small"
            }).hide();
            d.ajaxJSON(b.attr("href").replace(/\/download.*/, ""), "GET", {}, function (a) {
                var e = a && a.attachment,
                    f = e && e.scribd_doc && e.scribd_doc.attributes;
                b.loadingImage("remove");
                if (e && (e["scribdable?"] || d.isPreviewable(e.content_type, "google"))) {
                    var h = d("<span><br /></span>").insertAfter(b.parents(".link_holder:last")).loadDocPreview({
                        scribd_doc_id: f && f.doc_id,
                        scribd_access_key: f && f.access_key,
                        mimeType: e.content_type,
                        public_url: e.authenticated_s3_url,
                        attachment_scribd_render_url: e.scribd_render_url,
                        attachment_preview_processing: e.workflow_state == "pending_upload" || e.workflow_state == "processing"
                    }).append(d('<a href="#" style="font-size: 0.8em;" class="hide_file_preview_link">' + g(c.t("links.minimize_file_preview", "Minimize File Preview")) + "</a>").click(function (a) {
                        a.preventDefault(), b.show(), h.remove(), d.trackEvent("hide_embedded_content", "hide_file_preview")
                    }));
                    d.trackEvent("show_embedded_content", "show_file_preview")
                }
            }, function () {
                b.loadingImage("remove").hide()
            })
        }) : d("a.scribd_file_preview_link").live("click", function (a) {
            a.preventDefault(), alert(c.t("alerts.file_previews_disabled", "File previews have been disabled for this Canvas site"))
        });
        var t;
        d.subscribe("userContent/change", function () {
            clearTimeout(t), t = setTimeout(s, 50)
        }), d(document).bind("user_content_change", s), setInterval(s, 15e3), setTimeout(s, 1e3), d(".zone_cached_datetime").each(function () {
            if (d(this).attr("title")) {
                var a = d.parseFromISO(d(this).attr("title"));
                a.timestamp && d(this).text(a.datetime_formatted)
            }
        }), d(".show_sub_messages_link").click(function (a) {
            a.preventDefault(), d(this).parents(".subcontent").find(".communication_sub_message.toggled_communication_sub_message").removeClass("toggled_communication_sub_message"), d(this).parents(".communication_sub_message").remove()
        }), d(".show_comments_link").click(function (a) {
            a.preventDefault(), d(this).closest("ul").find("li").show(), d(this).closest("li").remove()
        }), d(".communication_message .message_short .read_more_link").click(function (a) {
            a.preventDefault(), d(this).parents(".communication_message").find(".message_short").hide().end().find(".message").show()
        }), d(".communication_message .close_notification_link").live("click", function (a) {
            a.preventDefault();
            var b = d(this).parents(".communication_message");
            b.confirmDelete({
                url: d(this).attr("rel"),
                noMessage: !0,
                success: function () {
                    d(this).slideUp(function () {
                        d(this).remove()
                    })
                }
            })
        }), d(".communication_message .add_entry_link").click(function (a) {
            a.preventDefault();
            var b = d(this).parents(".communication_message"),
                c = b.find(".reply_message").hide(),
                f = b.find(".communication_sub_message.blank").clone(!0).removeClass("blank");
            c.before(f.show());
            var g = e.uniqueId("textarea_");
            f.find("textarea.rich_text").attr("id", g), d(document).triggerHandler("richTextStart", d("#" + g)), f.find("textarea:first").focus().select()
        }), d(document).bind("richTextStart", function (a, b) {
            if (!b || b.length === 0) return;
            b = d(b);
            if (!b || b.length === 0) return;
            b.editorBox(), b.editorBox("focus", !0), h && (h.attachToEditor(b), d("#sidebar_content").hide(), h.show())
        }).bind("richTextEnd", function (a, b) {
            if (!b || b.length === 0) return;
            b = d(b);
            if (!b || b.length === 0) return;
            b.editorBox("destroy"), h && (d("#sidebar_content").show(), h.hide())
        }), d(".cant_record_link").click(function (a) {
            a.preventDefault(), d("#cant_record_dialog").dialog({
                modal: !0,
                title: c.t("titles.cant_create_recordings", "Can't Create Recordings?"),
                width: 400
            })
        }), d(".communication_message .content .links .show_users_link,.communication_message .header .show_users_link").click(function (a) {
            a.preventDefault(), d(this).parents(".communication_message").find(".content .users_list").slideToggle()
        }), d(".communication_message .delete_message_link").click(function (a) {
            a.preventDefault(), d(this).parents(".communication_message").confirmDelete({
                noMessage: !0,
                url: d(this).attr("href"),
                success: function () {
                    d(this).slideUp()
                }
            })
        }), d(".communication_sub_message .add_conversation_message_form").formSubmit({
            beforeSubmit: function (a) {
                d(this).find("button").attr("disabled", !0), d(this).find(".submit_button").text(c.t("status.posting_message", "Posting Message...")), d(this).loadingImage()
            },
            success: function (a) {
                d(this).loadingImage("remove");
                var b = d(this).parents(".communication_sub_message"),
                    c = b.parents(".communication_message");
                message_data = a.messages[0], b.fillTemplateData({
                    data: {
                        post_date: d.parseFromISO(message_data.created_at).datetime_formatted,
                        message: message_data.body
                    },
                    htmlValues: ["message"]
                }), b.find(".message").show(), d(this).remove(), c.find(".reply_message").show(), d.flashMessage("Message Sent!"), d(document).triggerHandler("user_content_change"), location.pathname === "/" && d.trackEvent("dashboard_comment", "create")
            },
            error: function (a) {
                d(this).loadingImage("remove"), d(this).find("button").attr("disabled", !1), d(this).find(".submit_button").text("Post Failed, Try Again"), d(this).formErrors(a)
            }
        }), d(".communication_sub_message .add_sub_message_form").formSubmit({
            beforeSubmit: function (a) {
                d(this).find("button").attr("disabled", !0), d(this).find(".submit_button").text(c.t("status.posting_message", "Posting Message...")), d(this).loadingImage()
            },
            success: function (a) {
                d(this).loadingImage("remove");
                var b = d(this).parents(".communication_sub_message");
                if (d(this).hasClass("submission_comment_form")) {
                    var c = d(this).getTemplateData({
                        textValues: ["submission_user_id"]
                    }).submission_user_id,
                        e = null;
                    for (var f in a) {
                        var g = a[f].submission;
                        g.user_id == c && (e = g)
                    }
                    if (e) {
                        var h = e.submission_comments[e.submission_comments.length - 1].submission_comment;
                        h.post_date = d.parseFromISO(h.created_at).datetime_formatted, h.message = h.formatted_body || h.comment, b.fillTemplateData({
                            data: h,
                            htmlValues: ["message"]
                        })
                    }
                } else {
                    var i = a.discussion_entry;
                    i.post_date = d.parseFromISO(i.created_at).datetime_formatted, b.find(".content > .message_html").val(i.message), b.fillTemplateData({
                        data: i,
                        htmlValues: ["message"]
                    })
                }
                b.find(".message").show(), b.find(".user_content").removeClass("enhanced"), b.parents(".communication_message").find(".reply_message").removeClass("lonely_behavior_message").show(), d(document).triggerHandler("richTextEnd", d(this).find("textarea.rich_text")), d(document).triggerHandler("user_content_change"), d(this).remove(), location.href.match(/dashboard/) && d.trackEvent("dashboard_comment", "create")
            },
            error: function (a) {
                d(this).loadingImage("remove"), d(this).find("button").attr("disabled", !1), d(this).find(".submit_button").text(c.t("errors.posting_message_failed", "Post Failed, Try Again")), d(this).formErrors(a)
            }
        }), d(".communication_sub_message form .cancel_button").click(function () {
            var a = d(this).parents(".communication_sub_message"),
                b = d(this).parents(".communication_message");
            d(document).triggerHandler("richTextEnd", a.find("textarea.rich_text")), a.remove(), b.find(".reply_message").show()
        }), d(".communication_message,.communication_sub_message").bind("focusin mouseenter", function () {
            d(this).addClass("communication_message_hover")
        }).bind("focusout mouseleave", function () {
            d(this).removeClass("communication_message_hover")
        }), d(".communication_sub_message .more_options_reply_link").click(function (a) {
            a.preventDefault();
            var b = d(this).parents("form"),
                c = null;
            b.hasClass("submission_comment_form") ? c = {
                comment: b.find("textarea:visible:first").val() || ""
            } : c = {
                message: b.find("textarea:visible:first").val() || ""
            }, location.href = d(this).attr("href") + "?message=" + encodeURIComponent(c.message)
        }), d(".communication_message.new_activity_message").ifExists(function () {
            this.find(".message_type img").click(function () {
                var a = d(this),
                    b = d.trim(a.attr("class"));
                a.parents(".message_type").find("img").removeClass("selected"), a.addClass("selected").parents(".new_activity_message").find(".message_type_text").text(a.attr("title")).end().find(".activity_form").hide().end().find("textarea, :text").val("").end().find("." + b + "_form").show().find(".context_select").change()
            }), this.find(".context_select").change(function () {
                var a = d(this),
                    b = a.val(),
                    c = a.parents(".communication_message"),
                    e = c.find("form");
                e.attr("action", c.find("." + b + "_form_url").attr("href")), e.data("context_name", this.options[this.selectedIndex].text), e.data("context_code", b), c.find(".roster_list").hide().find(":checkbox").each(function () {
                    d(this).attr("checked", !1)
                }), c.find("." + b + "_roster_list").show()
            }).triggerHandler("change"), this.find(".cancel_button").click(function (a) {
                d(this).parents(".communication_message").hide().prev(".new_activity_message").show()
            }), this.find(".new_activity_message_link").click(function (a) {
                a.preventDefault(), d(this).parents(".communication_message").hide().next(".new_activity_message").find(".message_type img.selected").click().end().show().find(":text:visible:first").focus().select()
            }), this.find("form.message_form").formSubmit({
                beforeSubmit: function (a) {
                    d("button").attr("disabled", !0), d("button.submit_button").text(c.t("status.posting_message", "Posting Message..."))
                },
                success: function (a) {
                    d("button").attr("disabled", !1), d("button.submit_button").text("Post Message");
                    var b = d(this).data("context_code") || "",
                        c = d(this).data("context_name") || "";
                    if (d(this).hasClass("discussion_topic_form")) {
                        var e = a.discussion_topic;
                        e.context_code = c, e.user_name = d("#identity .user_name").text(), e.post_date = d.parseFromISO(e.created_at).datetime_formatted, e.topic_id = e.id;
                        var f = d(this).parents(".communication_message").find(".template"),
                            g = f.find(".communication_message").clone(!0);
                        g.find(".header .title,.behavior_content .less_important a").attr("href", f.find("." + b + "_topic_url").attr("href")), g.find(".add_entry_link").attr("href", f.find("." + b + "_topics_url").attr("href")), g.find(".user_name").attr("href", f.find("." + b + "_user_url").attr("href")), g.find(".topic_assignment_link,.topic_assignment_url").attr("href", f.find("." + b + "_assignment_url").attr("href")), g.find(".attachment_name,.topic_attachment_url").attr("href", f.find("." + b + "_attachment_url").attr("href"));
                        var h = {
                            discussion_topic_id: e.id
                        };
                        g.fillTemplateData({
                            data: e,
                            hrefValues: ["topic_id", "user_id", "assignment_id", "attachment_id"],
                            avoid: ".subcontent"
                        }), g.find(".subcontent").fillTemplateData({
                            data: h,
                            hrefValues: ["topic_id", "user_id"]
                        }), g.find(".subcontent form").attr("action", f.find("." + b + "_entries_url").attr("href")), g.fillFormData(h, {
                            object_name: "discussion_entry"
                        }), d(this).parents(".communication_message").after(g.hide()), g.slideDown(), d(this).parents(".communication_message").slideUp(), d(this).parents(".communication_message").prev(".new_activity_message").slideDown()
                    } else d(this).hasClass("announcement_form") || location.reload()
                },
                error: function (a) {
                    d("button").attr("disabled", !1), d("button.submit_button").text(c.t("errors.posting_message_failed", "Post Failed, Try Again")), d(this).formErrors(a)
                }
            })
        }), d("#topic_list .show_all_messages_link").show().click(function (a) {
            a.preventDefault(), d("#topic_list .topic_message").show(), d(this).hide()
        });
        var u = parseInt(d("#time_zone_offset").text(), 10),
            v = [];
        setTimeout(w, 100);
        var y = d("#sequence_footer .sequence_details_url").filter(":last").attr("href");
        y && d.ajaxJSON(y, "GET", {}, function (a) {
            var b = d("#sequence_footer");
            a.current_item && (d("#sequence_details .current").fillTemplateData({
                data: a.current_item.content_tag
            }), d.each({
                previous: ".prev",
                next: ".next"
            }, function (e, f) {
                var g = b.find(f);
                if (a[e + "_item"] || a[e + "_module"]) {
                    var h = a[e + "_item"] && a[e + "_item"].content_tag || a[e + "_module"] && a[e + "_module"].context_module;
                    a[e + "_item"] || (h.title = h.title || h.name, h.workflow_state === "unpublished" && (h.title += " (" + c.t("draft", "Draft") + ")"), h.text = e == "previous" ? c.t("buttons.previous_module", "Previous Module") : c.t("buttons.next_module", "Next Module"), g.addClass("module_button")), g.fillTemplateData({
                        data: h
                    }), a[e + "_item"] ? g.attr("href", d.replaceTags(b.find(".module_item_url").attr("href"), "id", h.id)) : g.attr("href", d.replaceTags(b.find(".module_url").attr("href"), "id", h.id) + "/items/" + (e === "previous" ? "last" : "first"))
                } else g.hide()
            }), b.show(), d(window).resize())
        });
        var z = d("#wizard_box"),
            B = window.location.pathname;
        d(".close_wizard_link").click(function (a) {
            a.preventDefault(), f.set("hide_wizard_" + B, !0), z.slideUp("fast", function () {
                d(".wizard_popup_link").slideDown("fast"), d(".wizard_popup_link").focus(), A("hide")
            })
        }), d(".wizard_popup_link").click(function (a) {
            a.preventDefault(), d(".wizard_popup_link").slideUp("fast"), z.slideDown("fast", function () {
                z.triggerHandler("wizard_opened"), z.focus(), d([document, window]).triggerHandler("scroll")
            })
        }), z.ifExists(function (a) {
            a.bind("wizard_opened", function () {
                var b = a.find(".wizard_options"),
                    c = b.height();
                b.height(c), a.find(".wizard_details").css({
                    maxHeight: c - 5,
                    overflow: "auto"
                }), A("show")
            }), a.find(".wizard_options_list .option").click(function (b) {
                var c = d(this),
                    e = d(b.target).closest("a");
                if (e.length > 0 && e.attr("href") != "#") return;
                b.preventDefault(), c.parents(".wizard_options_list").find(".option.selected").removeClass("selected"), c.addClass("selected");
                var f = a.find(".wizard_details"),
                    g = c.getTemplateData({
                        textValues: ["header"]
                    });
                g.link = g.header, f.fillTemplateData({
                    data: g
                }), f.find(".details").remove(), f.find(".header").after(c.find(".details").clone(!0).show());
                var h = c.find(".header").attr("href");
                h != "#" ? f.find(".link").show().attr("href", h) : f.find(".link").hide(), f.hide().fadeIn("fast")
            }), setTimeout(function () {
                f.get("hide_wizard_" + B) || d(".wizard_popup_link.auto_open:first").click()
            }, 500)
        }), d("#right-side").delegate(".more_link", "click", function (a) {
            var b = d(this),
                c = b.parents("ul").children(":hidden").show();
            return b.closest("li").remove(), a.screenX === 0 && c.first().find(":tabbable:first").focus(), !1
        }), d("#right-side, #topic_list").delegate(".disable_item_link", "click", function (a) {
            function f(a) {
                b.confirmDelete({
                    url: a,
                    noMessage: !0,
                    success: function () {
                        d(this).slideUp(function () {
                            d(this).remove()
                        })
                    }
                })
            }
            a.preventDefault();
            var b = d(this).parents("li, div.topic_message"),
                e = d(this).data("api-href");
            d(this).hasClass("grading") ? (options = {}, options['<span class="ui-icon ui-icon-trash">&nbsp;</span> ' + g(c.t("ignore_forever", "Ignore Forever"))] = function () {
                f(e + "?permanent=1")
            }, options['<span class="ui-icon ui-icon-star">&nbsp;</span> ' + g(c.t("ignore_until_new_submission", "Ignore Until New Submission"))] = function () {
                f(e)
            }, d(this).dropdownList({
                options: options
            })) : f(e + "?permanent=1")
        }), setTimeout(function () {
            d("#content a:external,#content a.explicit_external_link").each(function () {
                d(this).not(":has(img)").not(".not_external").addClass("external").children("span.ui-icon-extlink").remove().end().html("<span>" + d(this).html() + "</span>").attr("target", "_blank").append('<span class="ui-icon ui-icon-extlink ui-icon-inline" title="' + g(c.t("titles.external_link", "Links to an external site.")) + '"/>')
            })
        }, 2e3)
    }), d("input[placeholder], textarea[placeholder]").placeholder()
}), define("link_enrollment", ["i18n!link_enrollment", "jquery", "jquery.ajaxJSON", "jquery.instructure_forms", "jqueryui/dialog", "jquery.instructure_misc_plugins", "jquery.templateData"], function (a, b) {
    window.link_enrollment = function () {
        return {
            choose: function (c, d, e, f) {
                var g = b(this).parents(".user"),
                    h = b("#link_student_dialog"),
                    i = {};
                i.short_name = c, h.fillTemplateData({
                    data: i
                }), h.data("callback", f);
                if (!h.data("loaded")) {
                    h.find(".loading_message").text(a.t("messages.loading_students", "Loading Students...")), h.find(".student_options option:not(.blank)").remove();
                    var j = h.find(".student_url").attr("href");
                    b.ajaxJSON(j, "GET", {}, function (c) {
                        for (var f in c) {
                            var g = c[f],
                                i = b("<option/>");
                            g.id && g.name && (i.val(g.id).text(g.name), h.find(".student_options").append(i))
                        }
                        var i = b("<option/>");
                        i.val("none").text(a.t("options.no_link", "[ No Link ]")), h.find(".student_options").append(i), h.find(".loading_message").hide().end().find(".students_link").show(), link_enrollment.updateDialog(h, d, e), h.data("loaded", !0)
                    }, function () {
                        h.find(".loading_message").text(a.t("errors.load_failed", "Loading Students Failed, please try again"))
                    })
                } else link_enrollment.updateDialog(h, d, e);
                h.find(".existing_user").showIf(e), h.dialog({
                    title: a.t("titles.link_to_student", "Link to Student"),
                    width: 400
                })
            },
            updateDialog: function (a, b, c) {
                a.find(".enrollment_id").val(b), a.find(".existing_user").showIf(c), a.find(".student_options").val("none").val(c);
                var d = {};
                d.existing_user_name = a.find(".student_options option[value='" + c + "']").first().text(), a.fillTemplateData({
                    data: d
                })
            }
        }
    }(), b(document).ready(function () {
        b(document).bind("enrollment_added", function () {
            b("#link_student_dialog").data("loaded", !1)
        }), b("#link_student_dialog .cancel_button").click(function () {
            b("#link_student_dialog").dialog("close")
        }), b("#link_student_dialog_form").formSubmit({
            beforeSubmit: function (c) {
                b(this).find("button").attr("disabled", !0).end().find(".save_button").text(a.t("messages.linking_to_student", "Linking to Student..."))
            },
            success: function (c) {
                b(this).find("button").attr("disabled", !1).end().find(".save_button").text(a.t("buttons.link", "Link to Student"));
                var d = c.enrollment,
                    e = b("#link_student_dialog").data("callback");
                b("#link_student_dialog").dialog("close"), b.isFunction(e) && d && e(d)
            },
            error: function (c) {
                b(this).find("button").attr("disabled", !1).find(".save_button").text(a.t("errors.link_failed", "Linking Failed, please try again"))
            }
        })
    })
}), function () {
    require(["Backbone", "compiled/widget/courseList", "compiled/helpDialog", "compiled/tours", "translations/_core_en", "jquery.ajaxJSON", "vendor/firebugx", "jquery.google-analytics", "vendor/swfobject/swfobject", "reminders", "jquery.instructure_forms", "instructure", "ajax_errors", "page_views", "compiled/license_help", "compiled/behaviors/ujsLinks", "compiled/behaviors/admin-links", "compiled/behaviors/activate", "compiled/behaviors/elementToggler", "compiled/behaviors/tooltip", "compiled/behaviors/instructure_inline_media_comment", "media_comments", "order", "jqueryui/effects/drop", "jqueryui/progressbar", "jqueryui/tabs", "compiled/registration/incompleteRegistrationWarning", "jquery.fancyplaceholder", "jqueryui/autocomplete", "link_enrollment", "media_comments", "vendor/jquery.pageless", "vendor/jquery.scrollTo", "compiled/badge_counts"], function (a, b, c, d) {
        var e;
        return b.init(), c.initTriggers(), d.init(), INST.browser.ie8 && $('<style>:before,:after{content:"" !important}</style>').appendTo("head").delay(1).remove(), $("#skip_navigation_link").on("click", function () {
            return $($(this).attr("href")).attr("tabindex", -1).focus()
        }), e = $("#header-logo"), e.length > 0 && e.css("background-image").match(/\/canvas\/header_canvas_logo\.png/) && e.addClass("original"), $("body").on("click", "[data-pushstate]", function (b) {
            return b.preventDefault(), a.history.navigate($(this).attr("href"), !0)
        })
    })
}.call(this), define("common", function () {})
